手把手教你在当前View上获取父控制器
2019-04-14 本文已影响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