美文网首页iOS DeveloperiOS学习开发程序员
iOS开发如何找到最上层控制器,也就是当前控制器

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

作者: 夜凉听风雨 | 来源:发表于2017-06-01 19:10 被阅读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;
        }
    }
    

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

    相关文章

      网友评论

        本文标题:iOS开发如何找到最上层控制器,也就是当前控制器

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