Skip to content

Instantly share code, notes, and snippets.

@edwardean
Last active May 28, 2019 08:19
Show Gist options
  • Save edwardean/2a1cd5230ac31fc7d0c147457444c8cd to your computer and use it in GitHub Desktop.
Save edwardean/2a1cd5230ac31fc7d0c147457444c8cd to your computer and use it in GitHub Desktop.
根据UIView查找它所在的UIViewController

1:

- (UIViewController *)viewController {
    for (UIView *nextView = self; nextView; nextView = nextView.superview) {
        UIResponder *nextResponder = [nextView nextResponder];
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            return (UIViewController *)nextResponder;
        }
    }
    return nil;
}

2:

extension UIResponder {
    @objc var findViewController: UIViewController? {
        if let vc = self as? UIViewController {
            return vc
        }
        return next?.findViewController
    }
}

3: 私有API

UIViewController *vc = [view __dbg_viewController]; 或者 UIViewController *vc = [view _viewDelegate];

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment