iOS-通过消息响应者链找到UIView所在的UIViewController

@interface UIView (FirstViewController)

- (UIViewController *) firstViewController;
- (id) traverseResponderChainForUIViewController;

@end

@implementation UIView (FirstViewController)

- (UIViewController *) firstViewController {
    // convenience function for casting and to "mask" the recursive function
    return (UIViewController *)[self traverseResponderChainForUIViewController];
}

- (id) traverseResponderChainForUIViewController {
    id nextResponder = [self nextResponder];
    if ([nextResponder isKindOfClass:[UIViewController class]]) {
        return nextResponder;
    } else if ([nextResponder isKindOfClass:[UIView class]]) {
        return [nextResponder traverseResponderChainForUIViewController];
    } else {
        return nil;
    }
}

你可能感兴趣的:(消息响应者链)