如何在prepareForSegue中嵌入UINavigationController?

时间:2017-04-01 03:09:47

标签: ios swift swift3 uinavigationcontroller

目前,我VC1的{​​{1}}类型UITableViewController已嵌入UINavigationController。当用户选择一个单元格时,它会执行push segue到VC2类型UITableViewController。这很好,因为导航栏仍然存在。

然而,在VC1中,导航栏中有一个UIBarButtonItem,在点按时,也会切换到VC2并执行不同的操作,但它会使用所有相同的菜单布局。

使用UIBarButtonItem转到VC2,我喜欢执行modal segue来区分这两个行为。

我知道modal segues包含整个屏幕,任何顶部栏都会被删除。

我关注了这个问题:Modal segue, navigation bar dissapears

提供的answers之一显示了如何在UINavigationController中嵌入prepareForSegue,因此我按照它进行了实施:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    if segue.identifier == "AddSegue"
    {
        let navigationController: UINavigationController = segue.destination as! UINavigationController

        var addVC: VC2 = VC2()

        addVC = navigationController.viewControllers[0] as! VC2

    }
}

然而,我收到错误:

  

无法转换类型' VC2'至   '的UINavigationController'

如何在UINavigationController中正确嵌入prepareForSegue,因为我需要在不同的视图控制器之间传递数据。

这是我的故事板:

enter image description here

1 个答案:

答案 0 :(得分:0)

您正在交叉的segue是您的VC2,而不是导航控制器。您将需要更新"AddSegue" segue以指向导航控制器,然后将VC2链接为导航控制器的根视图控制器。

如果您发布了故事板,我可以为您提供有关如何执行此操作的更多详细信息。

编辑:这是你应该如何设置你的故事板。它可能有点奇怪,因为VC2有两个父导航控制器,但应该没问题。

enter image description here