通过当前view得到所在的viewcontroller

 1 @implementation UIView (GetVCAdditions)
 2 
 3 - (UIViewController *)GetiewController {
 4     Class vcc = [UIViewController class];
 5     UIResponder *responder = self;
 6     while ((responder = [responder nextResponder]))
 7         if ([responder isKindOfClass: vcc])
 8             return (UIViewController *)responder;
 9     return nil;
10 }

 这里其实用到了 UIResponder

1 - (UIResponder*)nextResponder;

返回接收者的下一个相应,如果没有就返回nil

UIResponder类不自动存储和设置下一个响应者,而是默认返回nil。子类必须override这个方法来设置下一个响应者。

UIView实现了这个方法,因为可以返回管理这个UIView的UIViewController或者它的父类;

UIViewController实现了这个方法,返回UIViewController的View的父View;

UIWindow发挥UIApplication对象;

UIApplication返回nil

 

转载于:https://www.cnblogs.com/UncleJoke/p/3975466.html

上一篇:ios开发之UIView和UIViewController


下一篇:URL Handle in Swift (二) — 响应链处理 URL