iOS之获取当前显示的UIViewController

最近项目中加入了推送通知,需要用到获取到当前显示的UIViewController,从而去做跳转,查阅相关资料,找到了解决方法,在这里记录一下

  1. 添加创建UIViewController的分类,并添加相应方法,如下
- (UIViewController *)visibleViewControllerIfExist {
    
    if (self.presentedViewController) {
        return [self.presentedViewController visibleViewControllerIfExist];
    }
    
    if ([self isKindOfClass:[UINavigationController class]]) {
        return [((UINavigationController *)self).topViewController visibleViewControllerIfExist];
    }
    
    if ([self isKindOfClass:[UITabBarController class]]) {
        return [((UITabBarController *)self).selectedViewController visibleViewControllerIfExist];
    }
    
    if ([self isViewLoaded] && self.view.window) {
        return self;
    } else {
        NSLog(@"visibleViewControllerIfExist:,找不到可见的viewController。self = %@, self.view.window = %@", self, self.view.window);
        return nil;
    }
}
  1. 获取当前显示的控制器
+ (UIViewController *)visibleViewController {
    UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
    UIViewController *visibleViewController = [rootViewController visibleViewControllerIfExist];
    return visibleViewController;
}

经过上面这两步,就可以在任何地方获取到当前显示的控制器了。

你可能感兴趣的:(iOS之获取当前显示的UIViewController)