Swift:Segue(模态)到嵌入另一个导航控制器的UITableViewController

时间:2015-01-31 07:33:06

标签: ios casting segue

背景:我想显示一个从UITableViewController(A)到UITableViewController(B)的模态segue,但是我想要显示一个NavigationBar到"取消"和"保存"。


我做了什么
在故事板中:

  1. 我按住c将单元格从A拖动到B,并设置segue标识符" selectItem"
  2. 我选择B并选择"编辑 - 嵌入 - 导航控制器"
  3. 在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
            }
        }
    }
    

    storyboard


    错误:应用程序在let destinationViewController = segue.destinationViewController as B崩溃,错误为swift_dynamicCastClassUnconditional。如果我没有将导航控制器嵌入到B中,程序就不会崩溃。但我真的需要一个导航栏。
    有没有解决方案或其他方法来实现这一目标?谢谢! error 1 enter image description here


    PS:我尝试在故事板中从对象库中拖动一个NavigationBar,但它错过了背景的一部分来覆盖状态栏...

3 个答案:

答案 0 :(得分:5)

  1. 在故事板中创建UITableViewController
  2. 选择您的第二个UITableViewController(您希望以模态方式呈现的那个),并将其嵌入UINavigationController
  3. 添加" 取消"和" 保存" UIBarButtonItem进入第二个UINavitionItem的{​​{1}}。
  4. 选择您的第一个UITableViewController
  5. UITablViewCell
  6. UITableViewController到您的Control+Drag
  7. 选择" UINavigationController"根据" Selecteion Segue"下拉列表中的选项。
  8. 要在第一个Present Modally中传递数据,请覆盖方法:
  9. UITableViewController

    以下是截图:

    enter image description here enter image description here

    这应该做的,干杯!

答案 1 :(得分:0)

我解决了!
我在let dest = segue.destinationViewController as B行添加了一个BreakPoint,我发现segue.destinationViewControllerNavigationController类型。所以我通过将此行替换为:

来修复它
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
}

这个场景。这只是一种语法差异。