开发[0001]iOS实用笔记ios实用开发技巧

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

2016-05-30  本文已影响13451人  First灬DKS

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

返回事件

Demo的GitHub地址

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

(喜欢就支持一下啊,你的赞美就是我最大的动力~哈哈)

上一篇下一篇

猜你喜欢

热点阅读