背景:我想显示一个从UITableViewController(A)到UITableViewController(B)的模态segue,但是我想要显示一个NavigationBar到"取消"和"保存"。
我做了什么:
在故事板中:
在A的ViewController中:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifer == "selectItem" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let destinationViewController = segue.destinationViewController as B
// Pass value from A to B
}
}
}
错误:应用程序在let destinationViewController = segue.destinationViewController as B
崩溃,错误为swift_dynamicCastClassUnconditional
。如果我没有将导航控制器嵌入到B中,程序就不会崩溃。但我真的需要一个导航栏。
有没有解决方案或其他方法来实现这一目标?谢谢!
PS:我尝试在故事板中从对象库中拖动一个NavigationBar,但它错过了背景的一部分来覆盖状态栏...
答案 0 :(得分:5)
UITableViewController
。UITableViewController
(您希望以模态方式呈现的那个),并将其嵌入UINavigationController
。UIBarButtonItem
进入第二个UINavitionItem
的{{1}}。UITableViewController
UITablViewCell
UITableViewController
到您的Control+Drag
。UINavigationController
"根据" Selecteion Segue"下拉列表中的选项。Present Modally
中传递数据,请覆盖方法:UITableViewController
以下是截图:
这应该做的,干杯!
答案 1 :(得分:0)
我解决了!
我在let dest = segue.destinationViewController as B
行添加了一个BreakPoint,我发现segue.destinationViewController
是NavigationController
类型。所以我通过将此行替换为:
let dest = segue.destinationViewController as UINavigationController
let bVC = dest.topViewController as B
并做一些有价值的东西。
希望这能帮助其他人面对这个问题。
答案 2 :(得分:0)
我用
if let b = segue.destinationViewController.childViewControllers.first as? B {
//do something with b
}
这个场景。这只是一种语法差异。