Swift 3 - 将 segue 推送到导航 Controller

标签 swift swift3

在我的 Storyboard中,我有一个 View Controller ,还有一个导航 Controller 和另一个名为 HistoryController 的 View Controller 。 Navigation Controller 和 HistroyController 有一个关系“root view controller”

我的第一个 View Controller 上有一个按钮,该按钮有一个到导航 Controller 的推送序列。

我在第一个 View Controller 中有这段代码来准备转场:

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

        if let viewController = segue.destination as? HistoryController {
            viewController.detailItem = barcodeInt as AnyObject
        }

    }

我的问题是当我运行我的代码并按下第一个 Controller 中的按钮时,出现此错误:

Could not find a navigation controller for segue 'HistorySegue'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

我的问题是,为什么会出现此错误,我该如何解决?

我试过以下方法

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let navVC = segue.destinationViewController as? UINavigationController{
            if let historyVC = navVC.viewControllers[0] as? HistoryController{
                historyVC.detailItem = barcodeInt as AnyObject
            }
        }
    }

我也试过

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let nav = segue.destination as? UINavigationController {
        if let vc = nav.visibleViewController as? HistoryController {
            vc.detailItem = barcodeInt as AnyObject
        }
    }
}

我仍然得到同样的错误:

Could not find a navigation controller for segue 'HistorySegue'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

最佳答案

您需要将源代码 View Controller 嵌入到导航 Controller 中,或者将转场类型从推送更改为其他类型。此外,尝试将目标 Controller 转换为 UINavigationController 以防止在修复初始错误后出现不同的错误:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let navVC = segue.destinationViewController as? UINavigationController{
            if let historyVC = navVC.viewControllers[0] as? HistoryController{
                historyVC.detailItem = barcodeInt as AnyObject
            }
        }
    }

看看这是否适合你。

编辑:更新了上面的代码。

关于Swift 3 - 将 segue 推送到导航 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138497/

相关文章:

ios - 在 MKAnnotationView 中点击按钮打开 NavigationController

ios - 如何快速制作我自己的语法糖?

swift - 显示来自 Firebase 的用户信息

ios - 如何使用 Swift 在 iOS 上获取 ISO 639-2 国家代码

ios - UIActivityViewController 隐藏我的应用共享扩展

ios - Carthage:如何获取给定存储库的最新版本?

xml - 解析 GML 编码的 WFS 响应 XML 文件

uiview - UIView 边框中的文本

swift - 线程 1 exc_bad_instruction.. 快速错误

swift - 在 MacOS 上将 EAGLContext 与 CIContext 结合使用