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

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

字数679 阅读2500 评论15 喜欢18

举个栗子:我们在开发中,有时会遇到这样的情况,有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

strip

返回事件

参考文章:http://www.jianshu.com/p/6376149a2c4c

PopActionDemo的GitHub地址

转载于:https://my.oschina.net/5951008876/blog/757442

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值