在平时的开发中经常会遇到在自定义的某个View中要使用ViewController对象做一些跳转处理,通常会采用Delegate 或者 block 。现在总结一个新的方法,利用事件响应链原理来获得当前View所在的ViewController。
#import <UIKit/UIKit.h>
@interface UIView (ViewController)
- (UIViewController *)viewController;
@end
#import "UIView+ViewController.h"
@implementation UIView (ViewController)
- (UIViewController *)viewController
{
UIResponder *next = [self nextResponder];
do {
if ([next isKindOfClass:[UIViewController class]]) {
return (UIViewController *)next;
}
next = [next nextResponder];
} while (next != nil);
return nil;
}
@end