【问题标题】:DestinationViewController Segue and UINavigationController using swiftDestinationViewController Segue 和 UINavigationController 使用 swift
【发布时间】:2018-10-12 14:31:53
【问题描述】:

我已经构建了一个侧边菜单,当您单击条形按钮项时会弹出​​该菜单, 单击其中一个菜单选项后,视图控制器会加载正确的数据,但条形按钮项会消失。所以我做了一些研究 我发现问题出在我的 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)

我的故事板:

【问题讨论】:

  • 摆脱那些!使用条件转换和调试器来查看不是您认为的那样。
  • 你在哪一行得到这个错误?
  • @AhmetUstem 在这一行让 nav = segue.destination 为! UINavigationController
  • 您可能无法使用 segues 来构建侧边菜单。您可能只需要根据需要操作视图层次结构。您可以将主视图控制器设置为容器视图,然后将活动视图控制器设置为该视图
  • 您编辑了问题并将其更改为完全不同的内容 - 人们已经为您的问题编写了答案和 cmets,现在他们的答案不再相关。您应该恢复您的编辑并打开一个新问题。

标签: ios swift xcode uinavigationcontroller segue


【解决方案1】:

请更新您的代码如下。 这里 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
}

【讨论】:

  • 在 let win 行上出现此错误 Type 'AppDelegate' has no member 'sharedAppdelegate'
  • 在我的视图控制器上,我有这一行:self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 并且我收到此错误:线程 1:致命错误:展开时意外发现 nil一个可选值,当我调试它时我找不到任何 nil 值(当我点击菜单选项之一时发生)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多