如何实现Segue返回Navigation Controller?Xcode/Swift新手求助
嘿,作为刚上手Xcode/Swift的新手,这种导航跳转的问题确实容易绕晕,我来给你拆解几个可行的方案,完全适配你的流程:
方案1:利用导航栈的pop操作(最推荐,符合iOS原生导航逻辑)
你现在用的show segue会把新页面压入导航控制器的栈中,所以根本不需要额外创建返回用的segue,直接用导航控制器的内置方法就能实现返回:
- 如果是从测验选择页回到主题选择页(上一级页面),给测验页的返回按钮添加点击事件,写这段代码:
@IBAction func backToTopicPage(_ sender: UIButton) { navigationController?.popViewController(animated: true) } - 如果后续你的导航栈变深,想直接从任意页面跳回导航控制器的根视图(也就是主题选择页),用这个方法:
navigationController?.popToRootViewController(animated: true)
方案2:通过Unwind Segue(反向Segue)实现跳转
如果你一定要用segue的方式完成返回(比如想直接从测验页跳回Tab Bar),可以用Unwind Segue:
- 先在Tab Bar Controller或者**主题选择页(导航根视图)**里添加一个unwind的IBAction方法:
@IBAction func unwindToRoot(segue: UIStoryboardSegue) { // 这里可以写跳转后的逻辑,比如清空之前的主题/测验选择状态 } - 回到故事板,选中测验页的返回按钮,按住Ctrl键拖到页面顶部的Exit图标(那个绿色的出口标识),然后选择你刚才创建的
unwindToRoot方法,这样就完成了反向segue的创建。 - 运行App后点击按钮,就会直接跳回你设置unwind方法的那个控制器了。
避坑提醒
- 千万别用
performSegue(withIdentifier:)来做返回操作,showsegue会不断往导航栈里压入新的控制器,时间长了会导致栈溢出,而且不符合iOS用户的导航习惯。 - 如果是想从导航页面切换到Tab Bar的其他标签页,直接写
tabBarController?.selectedIndex = 0(0是你要切换的tab索引)就行,不需要segue。
内容的提问来源于stack exchange,提问作者Mathilde
相关产品推荐
相关产品推荐

