使用swift的DestinationViewController Segue和UINavigationController

时间:2018-05-02 13:03:10

标签: ios swift xcode uinavigationcontroller segue

我已经建立了一个侧边菜单,当你点击一个条形按钮项时弹出, 单击其中一个菜单选项后,视图控制器将使用正确的数据加载,但条形按钮项目将消失。所以我做了一些研究 我发现问题是我的segue目的地,我的segue目的地是视图控制器,而不是导航控制器,所以我尝试改变我的代码结束:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if let cell = sender as? UITableViewCell{
            let i = tableView.indexPath(for: cell)!.row
            if segue.identifier == "viewController"{

                let nav = segue.destination as! UINavigationController
                let addEventViewController = nav.topViewController as! ViewController

                addEventViewController.varView = i
                }  
            }
        } 

现在我收到了这个错误:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

我的故事板: enter image description here

2 个答案:

答案 0 :(得分:0)

请更新您的代码,如下所示。 这里 sharedAppdelegate()是appdelegate的共享实例

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let cell = sender as? UITableViewCell{
        let i = tableView.indexPath(for: cell)!.row
        if segue.identifier == "viewController"{

            let yourDestinationController = segue.destination as! ViewController
            let nav = UINavigationController.init(rootViewController: yourDestinationController)
            let win = AppDelegate.sharedAppdelegate().window
            win.rootViewController = nav
            win?.makeKeyAndVisible()
            addEventViewController.varView = i
            }  
        }
    } 

Appdelegate 中添加以下方法

 static func sharedAppdelegate() -> AppDelegate
{
    return UIApplication.shared.delegate as! AppDelegate
}

答案 1 :(得分:0)

我认为问题在于您从BackTableVC调用segue并且导航控制器没有segue,只有位于故事板右下方的控制器。您必须在RevealViewController上执行segue或重新链接segue,以便它通向导航控制器。