iOS实现点击Back返回按钮跨过多个ViewController跳到指定的ViewController

本文探讨了如何在iOS应用中,当从ViewController C点击Back按钮时,直接返回到ViewController A,而不是系统默认的返回到ViewController B。介绍了三种方案:使用popToViewController(_:animated:)、unwind segue和修改UINavigationController的viewControllers数组。最终推荐在ViewController C的ViewWillAppear中调整数组,以实现最小改动并保持与系统导航栏兼容的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS里有UINavigationViewController通过栈来管理UIViewController,如果你使用segue来指定UIViewController之间的跳转,那么系统默认点击NavigationBar的返回按钮会回到上一个在栈里的UIViewController,也就是执行了栈的pop操作。

那么问题来了,假如我的storyboard是这样的,ViewController A -> ViewController B -> ViewController C。在C里面点击了Back返回按钮,我希望能返回到A。

方案一,在C里面调用popToViewController(_:animated:)方法,可以跳到指定的UIViewController也就是该方法的第一个参数,只要这个UIViewController之前一直在栈中。

方案二,在A里面(目标ViewController)写unwind segue的action,通常格式是,
@IBAction func unwindName(unwindSegue: UIStoryboardSegue),方法名可以任意。然后在storyboard里找到ViewController C,C上方横条的有三个按钮一样的东西,第一个表示当前ViewController,第三个是Exit。点击第一个按钮,control加拖动到Exit按钮就可以指定unwind Action了,因为之前在目标ViewController里写过了,所以直接选择就行,然后设置好identifier,接下来在C里面适当的时机调用performSegue(withIdentifier: "identifier", sender: sender)就可以跳到目标ViewController了。

前面的两种方案都貌似可行,但是前提是必须要监听UINavigationBar的返回事件,奇怪的是iOS里面监听这个事件反而比较困难,可以监听但是里面涉及到NavigationBar里面一些复杂的内容,这里就不推荐了。

还有一种方案就是不用UINavigationBar,自己定义NavigationBar,这样Back按钮监听就和普通的按钮点击事件监听一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值