我试图实现navegationController以编程方式在viewcontrollers之间切换:
@IBAction func next(_ sender: Any) {
self.performSegue(withIdentifier: "next", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "next"{
let destNVC = segue.destination as! UINavigationController
let next = destNVC.topViewController as! NextViewController
next.title = "next!"
}
}
但是我收到了这个错误:
Could not cast value of type 'myProject.NextViewController' (0x108de5338) to 'UINavigationController' (0x10aa2d4a8).
你们中的任何人都知道我为什么会收到这个错误?
我非常感谢你的帮助。
答案 0 :(得分:1)
我认为屏幕截图中显示的最右边的VC是您的NextViewController
。
让我们看看在这种情况下segue.destination
是什么。找到segue.destination
所指的内容非常容易。查看你的故事板,找到你想要的segue,然后用箭头找到segue的结尾。无论箭头指向哪个VC,都是segue.destination
。 (segue的另一端是segue.source
btw)
现在我们知道了这一点,我们知道segue.destination
在这种情况下必须引用NextViewController
。现在您应该意识到应该纠正这一行:
let destNVC = segue.destination as! UINavigationController
好吧,试图将NextViewController
投放到UINavigationController
肯定会导致错误,不会被错过吗?
事实上,您可以将segue.destination
投射到NextViewController
!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "next"{
let next = segue.destination as! NextViewController
next.title = "next!"
}
}