最近项目中加入了推送通知,需要用到获取到当前显示的UIViewController,从而去做跳转,查阅相关资料,找到了解决方法,在这里记录一下
- 添加创建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;
}
}
- 获取当前显示的控制器
+ (UIViewController *)visibleViewController {
UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
UIViewController *visibleViewController = [rootViewController visibleViewControllerIfExist];
return visibleViewController;
}
经过上面这两步,就可以在任何地方获取到当前显示的控制器了。