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
返回事件参考文章:http://www.jianshu.com/p/6376149a2c4c
(喜欢就支持一下啊,你的赞美就是我最大的动力~哈哈)