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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容