美文网首页iOS开发知识
手把手教你在当前View上获取父控制器

手把手教你在当前View上获取父控制器

作者: 太阳骑士索拉尔 | 来源:发表于2019-04-14 10:05 被阅读0次

    前言

    • 写项目时遇到一个问题,在tableview上的cell上一个button的点击事件是页面的跳转,可由于MVC中UITableViewDataSource实现在View层,因此只能想办法在View上获取其父控制器

    参考文章

    代码详解

    通过当前视图获取父视图的控制器
    - (UIViewController *)LCZGetSuperViewController:(UIView *)view
    {
        for (UIView* next = [view superview]; next; next = next.superview) {
            UIResponder *nextResponder = [next nextResponder];
            if ([nextResponder isKindOfClass:[HomePageViewController class]]) {
                return (HomePageViewController *)nextResponder;
            }
        }
        return nil;
    }
    
    • 核心代码是调用了(UIResponder *)nextResponder方法,UIResponder类并不自动保存或设置下一个响应者,该方法的默认实现是返回nil。子类的实现必须重写这个方法来设置下一响应者。UIView的实现是返回管理它的UIViewController对象(如果它有)或者其父视图。而UIViewController的实现是返回它的视图的父视图;UIWindow的实现是返回app对象;而UIApplication的实现是返回nil。所以,响应链是在构建视图层次结构时生成的。通过它返回UIViewController

    相关文章

      网友评论

        本文标题:手把手教你在当前View上获取父控制器

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