为了账号安全,请及时绑定邮箱和手机立即绑定

iOS开发:点击系统的返回按钮,返回到指定的视图

标签:
iOS

举个栗子:我们在开发中,有时会遇到这样的情况,有A、B、C三个视图控制器,A中有一个按钮,点击按钮push到B控制器,B中有个按钮,点击push到C控制器,如果点击C左上角系统自带的返回按钮,会默认的执行下面的代码:

- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated;

返回到上一个页面B,当然我们可以通过自定义左上角的返回按钮,通过系统的方法:

- (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

返回到我们指定的视图控制器,但是此时会有一个问题,如果自定义了返回按钮,可以返回到指定的页面,但是如果通过右划的手势,此时页面返回的还是上一级页面,当然我们也可以通过给视图重新添加手势,在右划的时候,也返回到指定的页面,但是我觉得这样就有点儿工作量了;

我想要表达的意思就是:在不自定义返回按钮的前提下,A->B->C,点击C上面的返回按钮(或者通过右划的手势),返回到A页面怎么实现呢;

我的思路是这样的,在B push到C页面之后,在C页面中,把B从视图控制器中删除,此时的控制器中只有A和C了,点击C上面的返回按钮,返回的就是A页面;(哎,哎,别打...)代码如下,这是在C页面中的代码:

- (void)viewDidLoad {
    [super viewDidLoad];    //得到当前视图控制器中的所有控制器
    NSMutableArray *array = [self.navigationController.viewControllers mutableCopy];    //把B从里面删除
    [array removeObjectAtIndex:1];    //把删除后的控制器数组再次赋值
    [self.navigationController setViewControllers:[array copy] animated:YES];
}

当然,如果有4个视图控制器的话A/B/C/D,如果想用从D返回到到A,可以把B和C从里面删除了,具体思路根据具体业务分析;


如果你想获取点击系统的返回按钮的事件,有一个别人写好的方法可供参考,用的时候只需要在需要的viewController中实现一下协议中的方法就可以了:github地址:https://github.com/onegray/UIViewController-BackButtonHandler)

- (BOOL)navigationShouldPopOnBackButton;

这个第三方也有不足的地方,就是如果通过手势右滑,就获取不到pop的方法了,如果你还想把手势这个方法也给搞定,请移驾下面的地址,这个是我对上面的进行更改并添加了手势:https://github.com/FirstDKS521/PopAction

https://img1.sycdn.imooc.com//5d5e09bc0001878a00140020.gif

返回事件

Demo的GitHub地址



作者:First灬DKS
链接:https://www.jianshu.com/p/90a104ac6633


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消