在我的 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/