美文网首页知识点
iOS捕获viewController的pop事件

iOS捕获viewController的pop事件

作者: 吴文辉99 | 来源:发表于2017-12-06 14:22 被阅读0次

    最近在工作中需要解决一个问题:
    viewController需要捕获自己被导航控制器pop的事件,以及在自己被pop的时候处理一些事情。
      在网上搜到的几乎全是用UIViewController+BackButtonHandler这种拦截控制器pop的文章,跟我的需求完全不一样,对于一个控制器是否已经被pop无法判断,网上找了好久居然找不到一个方法符合我的需求,于是自己想办法。
    当控制器被pop时,导航控制器会走popViewControllerAnimated方法:

    - (UIViewController *)popViewControllerAnimated:(BOOL)animated
    

    于是把这件事告诉给需要知道自己被pop的controller,需要在popViewControllerAnimated里面做处理,有以下步骤:
    1.自定义一个导航控制器继承自UINavigationController,一般项目里面都会有一个基导航控制器,在自定义的导航控制器里重写popViewControllerAnimated方法。

    - (UIViewController *)popViewControllerAnimated:(BOOL)animated {
        UIViewController *vc = self.topViewController;
        if ([vc respondsToSelector:@selector(controllerWillPopHandler)]) {
            [vc performSelector:@selector(controllerWillPopHandler)];
        }
        return [super popViewControllerAnimated:animated];
    }
    

    2.在需要捕获自己被导航控制器pop的控制器中实现这个方法:

    - (void)controllerWillPopHandler {
        NSLog(@"我被pop了");
        // TODO
    }
    

    至此,目的已经实现了,不过以上代码在@selector(controllerWillPopHandler)处有警告,在这个自定义一个导航控制里实现这个方法,什么都不用做,警告就消除了。so easy,but it troubled me for a long time.
      当然也可以定义一个block或代理,在popViewControllerAnimated里执行,但是我那个项目情况有点特殊,这两种方法在我项目里都不能用,前面那种方法最完美。

    相关文章

      网友评论

        本文标题:iOS捕获viewController的pop事件

        本文链接:https://www.haomeiwen.com/subject/kjnkixtx.html