美文网首页
iOS 获取控制器

iOS 获取控制器

作者: Wynter_Wang | 来源:发表于2019-03-21 18:24 被阅读0次

在View中获取UIViewController

- (UIViewController*)viewController {
    UIResponder *nextResponder =  self;
    
    do {
        nextResponder = [nextResponder nextResponder];
        
        if ([nextResponder isKindOfClass:[UIViewController class]])
            return (UIViewController*)nextResponder;
        
    } while (nextResponder != nil);
    
    return nil;
}

UINavigationController获取顶部ViewController

self.navigationController.visibleViewController

获取当前展示顶层ViewController

+ (UIViewController *)topViewController {
    UIViewController *resultVC;
    resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
    while (resultVC.presentedViewController) {
        resultVC = [self _topViewController:resultVC.presentedViewController];
    }
    return resultVC;
}

+ (UIViewController *)_topViewController:(UIViewController *)vc {
    if ([vc isKindOfClass:[UINavigationController class]]) {
        return [self _topViewController:[(UINavigationController *)vc topViewController]];
    } else if ([vc isKindOfClass:[UITabBarController class]]) {
        return [self _topViewController:[(UITabBarController *)vc selectedViewController]];
    } else {
        return vc;
    }
    return nil;
}

获取当前ViewController的UINavigationController

+ (UINavigationController *)nextNavigationController {
    UIResponder *nextResponder = [self topViewController];
    
    do {
        nextResponder = [nextResponder nextResponder];
        
        if ([nextResponder isKindOfClass:[UINavigationController class]])
        return (UINavigationController*)nextResponder;
        
    } while (nextResponder != nil);
    
    UITabBarController *rootVC = (UITabBarController *)[[UIApplication sharedApplication].delegate window].rootViewController;
    
    return rootVC.selectedViewController;
}

记录一下,并非原创

相关文章

网友评论

      本文标题:iOS 获取控制器

      本文链接:https://www.haomeiwen.com/subject/eqtzmqtx.html