iOS DeveloperiOS学习开发程序员

iOS开发如何找到最上层控制器,也就是当前控制器

2017-06-01  本文已影响848人  夜凉听风雨

有时候会有这样的需求:封装一个类,在这个类里统一处理某个事件,但是需要在最上层控制器里做操作,比如跳转操作,通过下面的方法就可以找到最上层控制器了。实现思路是从根控制器一层一层向上找,直到找到最上层控制器。但是这个方法有一个小缺陷,如果一个控制器上面放的是另一个子控制器的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;
    }
}

如果有其他更好的方法,希望能在评论区交流,谢谢!

上一篇下一篇

猜你喜欢

热点阅读