Navigation Controller响应异常求助:栈不显示+Push Segue报错
看起来你遇到的两个问题其实是同一个根源导致的:你的ViewController并没有被正确嵌入到UINavigationController中。让我们一步步解决:
1. 确保ViewController被UINavigationController管理
这是解决所有问题的核心,按照以下步骤检查Storyboard配置:
- 打开你的Storyboard,选中
ViewController - 点击顶部菜单栏的 Editor -> Embed In -> Navigation Controller,此时你的ViewController会自动成为这个NavigationController的根视图控制器
- 如果这个NavigationController是App的入口页面,记得选中它,在右侧属性面板里勾选 Is Initial View Controller
完成这一步后,你的ViewController就正式加入到导航栈中了,导航栏的完整栈也会正常显示。
2. 修复Push Segue的异常问题
现在你的ViewController已经在导航栈里了,之前的segue异常会自动解决,但需要确保segue的配置正确:
- 如果你是在Storyboard里手动添加的segue,确认segue的类型是 Push(而不是Modal或者其他类型)
- 如果你更倾向用代码控制跳转(有时候更灵活),可以删除Storyboard里的segue,然后在
nextButtonPressed方法里添加如下代码:
@IBAction func nextButtonPressed(_ sender: UIButton) { // 替换成你详情页的类名和Storyboard ID guard let detailVC = storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController else { return } navigationController?.pushViewController(detailVC, animated: true) }
注意:要先给你的详情视图控制器在Storyboard里设置好对应的Storyboard ID
额外小提示
你代码里在viewDidLoad中设置了self.title = "test",这会直接覆盖titleNavigationBar这个IBOutlet的设置。如果想使用你绑定的titleNavigationBar来设置标题,可以改成:
titleNavigationBar.title = "test"
完成以上步骤后,导航栈会正常显示所有控制器,push跳转也不会再抛出异常了。
内容的提问来源于stack exchange,提问作者Blisko
相关产品推荐
相关产品推荐

