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