在iOS6中,我注意到新的容器视图,但不太确定如何从包含视图访问它的控制器。
场景:
我想从包含容器视图的视图控制器中访问Alert视图控制器中的标签。
它们之间有一个segue,我能用吗?
在iOS6中,我注意到新的容器视图,但不太确定如何从包含视图访问它的控制器。
场景:
我想从包含容器视图的视图控制器中访问Alert视图控制器中的标签。
它们之间有一个segue,我能用吗?
当前回答
在视图控制器的类型上使用Swift的switch语句还有另一种方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
switch segue.destination
{
case let aViewController as AViewController:
self.aViewController = aViewController
case let bViewController as BViewController:
self.bViewController = bViewController
default:
return
}
}
其他回答
我像这样使用代码:
- (IBAction)showCartItems:(id)sender{
ListOfCartItemsViewController *listOfItemsVC=[self.storyboard instantiateViewControllerWithIdentifier:@"ListOfCartItemsViewController"];
[self addChildViewController:listOfItemsVC];
}
你可以这样写
- (IBAction)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}
}
使用generic,你可以做一些甜蜜的事情。下面是Array的扩展:
extension Array {
func firstMatchingType<Type>() -> Type? {
return first(where: { $0 is Type }) as? Type
}
}
你可以在你的viewController中这样做:
var viewControllerInContainer: YourViewControllerClass? {
return childViewControllers.firstMatchingType()!
}
Swift编程
你可以这样写
var containerViewController: ExampleViewController?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// you can set this name in 'segue.embed' in storyboard
if segue.identifier == "checkinPopupIdentifierInStoryBoard" {
let connectContainerViewController = segue.destinationViewController as ExampleViewController
containerViewController = connectContainerViewController
}
}
在视图控制器的类型上使用Swift的switch语句还有另一种方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
switch segue.destination
{
case let aViewController as AViewController:
self.aViewController = aViewController
case let bViewController as BViewController:
self.bViewController = bViewController
default:
return
}
}