在iOS6中,我注意到新的容器视图,但不太确定如何从包含视图访问它的控制器。
场景:
我想从包含容器视图的视图控制器中访问Alert视图控制器中的标签。
它们之间有一个segue,我能用吗?
在iOS6中,我注意到新的容器视图,但不太确定如何从包含视图访问它的控制器。
场景:
我想从包含容器视图的视图控制器中访问Alert视图控制器中的标签。
它们之间有一个segue,我能用吗?
当前回答
你可以这样写
- (IBAction)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}
}
其他回答
如果有人正在寻找Swift 3.0,
viewController1, viewController2等等都是可访问的。
let viewController1 : OneViewController!
let viewController2 : TwoViewController!
// Safety handling of optional String
if let identifier: String = segue.identifier {
switch identifier {
case "segueName1":
viewController1 = segue.destination as! OneViewController
break
case "segueName2":
viewController2 = segue.destination as! TwoViewController
break
// ... More cases can be inserted here ...
default:
// A new segue is added in the storyboard but not yet including in this switch
print("A case missing for segue identifier: \(identifier)")
break
}
} else {
// Either the segue or the identifier is inaccessible
print("WARNING: identifier in segue is not accessible")
}
自我。当你需要父控件时,childViewControllers更相关。例如,如果子控制器是一个表视图,你想要强制重载它或通过点击按钮或父视图控制器上的任何其他事件来改变属性,你可以通过访问ChildViewController的实例来实现,而不是通过prepareForSegue。两者都有不同的应用方式。
在视图控制器的类型上使用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)showDetail:(UIButton *)sender {
DetailViewController *detailVc = [self.childViewControllers firstObject];
detailVc.lable.text = sender.titleLabel.text;
}
}
你可以简单地使用self.childViewControllers.lastObject(假设你只有一个子对象,否则使用objectAtIndex:)。