Swift开发:已创建视图控制器后如何正确添加Navigation Controller
你直接给DetailViewController套Navigation Controller触发报错,本质是两个问题:一是操作逻辑错误,二是Storyboard关联关系冲突。按下面步骤操作即可:
- 不要给二级跳转的DetailViewController单独嵌Navigation Controller。整个导航栈只需要给根视图控制器(也就是App启动后第一个展示的页面)套导航容器:选中根ViewController,点击Xcode顶部菜单栏
Editor-Embed In-Navigation Controller,Xcode会自动把这个Navigation Controller设为App初始入口,自动配置导航栏关联,不会触发冲突报错。 - 从根页面跳转到DetailViewController的Segue直接选
Show (Push)类型即可,跳转时系统会自动复用根页面外层的导航栈,Detail页面会自动带上导航栏和返回按钮,完全不需要单独给Detail页套导航控制器。 - 如果你的业务场景确实需要DetailViewController是独立模态弹出、自带导航栏(比如弹出的表单页需要做内部跳转),先删除DetailViewController上之前绑定的所有失效Segue、重复关联的IBOutlet/IBAction引用,清空无效关联后再选中DetailVC执行Embed In操作就不会报错。
踩坑提醒:给每一个二级页面都单独嵌Navigation Controller是错误写法,不仅会触发Storyboard配置报错,还会导致导航栏层级错乱、返回逻辑失效、内存占用升高。导航控制器是栈容器,一个完整的push跳转链路只需要在根节点套一次导航控制器即可。
内容的提问来源于stack exchange,提问作者sanalkrlk
相关产品推荐
相关产品推荐

