在iOS6中,我注意到新的容器视图,但不太确定如何从包含视图访问它的控制器。
场景:
我想从包含容器视图的视图控制器中访问Alert视图控制器中的标签。
它们之间有一个segue,我能用吗?
在iOS6中,我注意到新的容器视图,但不太确定如何从包含视图访问它的控制器。
场景:
我想从包含容器视图的视图控制器中访问Alert视图控制器中的标签。
它们之间有一个segue,我能用吗?
当前回答
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
}
}
其他回答
你可以这样写
- (IBAction)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}
}
自我。当你需要父控件时,childViewControllers更相关。例如,如果子控制器是一个表视图,你想要强制重载它或通过点击按钮或父视图控制器上的任何其他事件来改变属性,你可以通过访问ChildViewController的实例来实现,而不是通过prepareForSegue。两者都有不同的应用方式。
prepareForSegue方法有效,但它依赖于segue标识符魔术字符串。也许有更好的办法。
如果你知道你要找的VC的类,你可以用一个计算属性很好地做到这一点:
var camperVan: CamperVanViewController? {
return childViewControllers.flatMap({ $0 as? CamperVanViewController }).first
// This works because `flatMap` removes nils
}
这依赖于childViewControllers。虽然我同意依赖第一个类可能很脆弱,但命名您所寻找的类会使这个类看起来相当可靠。
我像这样使用代码:
- (IBAction)showCartItems:(id)sender{
ListOfCartItemsViewController *listOfItemsVC=[self.storyboard instantiateViewControllerWithIdentifier:@"ListOfCartItemsViewController"];
[self addChildViewController:listOfItemsVC];
}
你可以简单地使用self.childViewControllers.lastObject(假设你只有一个子对象,否则使用objectAtIndex:)。