Swift中无需Navigation Controller实现退出Segue可行吗?
完全可以不用Navigation Controller实现类似exit segue的返回功能,unwind segue(也就是你说的exit segue)本身不依赖导航控制器,只是大部分教程用导航控制器举例而已。下面是具体的实现步骤和问题排查:
方法一:正确配置Unwind Segue
在目标页面(FirstScreen)添加Unwind方法
打开FirstScreen的代码文件,添加以下方法,注意签名必须严格匹配,不能改参数类型:@IBAction func unwindToFirstScreen(_ segue: UIStoryboardSegue) { // 这里可以写返回后的逻辑,比如刷新数据,空着也没问题 }这个方法是unwind segue的“目标锚点”,Storyboard会识别带
@IBAction且参数为UIStoryboardSegue的方法。在SecondScreen关联Unwind Segue
回到Storyboard里的SecondScreen界面:- 选中你的返回按钮,按住Ctrl键拖拽到当前ViewController顶部的Exit图标(绿色的那个出口标志)
- 在弹出的菜单里选择你刚才在FirstScreen中写的
unwindToFirstScreen:方法 - 这样就完成了关联,点击按钮就会自动返回FirstScreen
排查无响应问题
如果关联后按钮还是没反应,检查这两点:- 确认SecondScreen是通过segue(比如
Present Modally)从FirstScreen跳转过来的,unwind segue只能回退到通过segue启动的页面;如果是手动代码初始化的SecondScreen,unwind无效,得用下面的手动方法。 - 检查Unwind方法是不是写在了FirstScreen里,别误写到SecondScreen或者其他页面了。
- 确认SecondScreen是通过segue(比如
方法二:手动代码实现返回(更直接)
如果不想用segue,直接给按钮加点击事件也能实现返回:
打开SecondScreen的代码,添加按钮的IBAction:
@IBAction func backButtonTapped(_ sender: UIButton) { // 如果SecondScreen是被present出来的,用这个 dismiss(animated: true, completion: nil) }
这种方式不需要依赖Storyboard的segue配置,逻辑更直观,适合新手快速实现。
内容的提问来源于stack exchange,提问作者Ryne Ignelzy
相关产品推荐
相关产品推荐

