gpt4 book ai didi

ios - 程序化 UINavigationController 和 segue 离开

转载 作者:行者123 更新时间:2023-11-28 12:47:38 25 4
gpt4 key购买 nike

在我的代码中,我需要通过导航层次结构,这就是为什么我在 UINavigationController 中有一个 UIViewController

如果用户在一个单元格上使用 tab 键并且有下一个级别,我会再次创建相同的 UIViewController 并将其推送到 UINavigationController 上。这很好用。

但是当我到达层次结构的末尾并尝试 performSegueWithIdentifier 以转到不同的 Controller 以查看详细信息时,应用程序崩溃并显示

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Receiver (<myproject.MenuController: 0x7fb2e0ea9ef0>)
has no segue with identifier 'showDetail''

但是我检查了 InterfaceBuilder,一切正常。有趣的是,如果我不插入下一级导航并直接对新 Controller 执行 segue,则一切正常。

我还尝试推送新 Controller ,就像我对导航所做的那样,但随后它尝试访问新 Controller 委托(delegate),奇怪的是 nil 并崩溃。

有人知道怎么做吗?

完整代码(在 MenuContoller 内部)

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
//self.performSegueWithIdentifier("showDetail", sender: self)
let clickedCell = self.tableViewItems[indexPath.row]
print("Selected \(clickedCell.itemID)")
// Check if subview has children, then we push a deeper level on the navigation controller
if (menuItems.filter{$0.parentID == clickedCell.itemID}.count > 0) {
let subNavigationController = MenuController()
// Set the currentNavigationItemID for the new view controller
subNavigationController.currentNavigationItemID = clickedCell.itemID
subNavigationController.title = clickedCell.itemDisplayName
self.navigationController?.pushViewController(subNavigationController, animated: true)
} else {
// Load new Controller to show details
self.performSegueWithIdentifier("showDetail", sender: self)
// let subNavigationController = ProductListViewController()
// subNavigationController.currentCategoryID = clickedCell.itemID
// self.navigationController?.pushViewController(subNavigationController, animated: true)
}

最佳答案

问题是您的 MenuController 不是从 Storyboard 创建的,所以它没有附加任何 segues。

您需要让 Storyboard 创建 MenuController,因此不要:

let subNavigationController = MenuController()

你需要:

let subNavigationController = self.storyboard?.instantiateViewControllerWithIdentifier("menuControllerID")

为此, Storyboard ID 必须在 Identity Inspector 中设置为 "menuControllerID" for MenuController

关于ios - 程序化 UINavigationController 和 segue 离开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com