有时候会有这样的需求:封装一个类,在这个类里统一处理某个事件,但是需要在最上层控制器里做操作,比如跳转操作,通过下面的方法就可以找到最上层控制器了。实现思路是从根控制器一层一层向上找,直到找到最上层控制器。但是这个方法有一个小缺陷,如果一个控制器上面放的是另一个子控制器的view,那么是找不到这个子控制器的。
+ (UIViewController *)topViewControllerWithRootViewController:(UIViewController*)rootViewController
{
if (rootViewController.presentedViewController) {
UIViewController* presentedViewController = rootViewController.presentedViewController;
return [self topViewControllerWithRootViewController:presentedViewController];
}else if ([rootViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabBarController = (UITabBarController *)rootViewController;
return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
} else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*)rootViewController;
return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
} else {
return rootViewController;
}
}
如果有其他更好的方法,希望能在评论区交流,谢谢!