一步一步:
prepareForSegue(_:sender:)
。segue.identifier
是否等于你在步骤1中指定的标识符。segue.destinationViewController
保存到步骤2中的属性中。viewDidLoad()
方法中存储了视图控制器。示例:
var containerViewController: YourContainerViewControllerClass?
let containerSegueName = "testSegue"
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == containerSegueName {
containerViewController = segue.destinationViewController as? YourContainerViewControllerClass
}
}
我建议不要依赖于segue.identifier
,而是直接测试destination
类型:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
if let vc = segue.destination as? YourViewController {
vc.someVariable = true
}
}
这样可以避免因为拼写错误而导致的segue名称错误。
var contentViewController : UIContentViewController?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == containerSegueName {
contentViewController = segue.destination as? UIContentViewController
}
}
macOS上的Swift 3:
// MARK: - Container View Controller
var containerViewController: ContainerViewController?
let containerSegueIdentifier = "Container Segue"
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
if segue.identifier == containerSegueIdentifier {
if let connectContainerViewController = segue.destinationController as? FormationViewController {
formationViewController = connectContainerViewController
}
}
}
检查标识符和控制器类。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
,在Swift 3和Xcode 8.3中将无法调用此方法。 - oOEric