iOS 获取当前显示的控制器

iOS OC 获得当前显示的控制器


我观察到点击mac版微信启动页面中的登录按钮时,手机端的微信都会present出一个确认页面。细致研究时会发现如果手机端当前停留的页面是被present出来的话,此时是不会弹出确认页面的。

今天我们讨论一下,如何获取当前显示的控制器。

mac微信启动页面
+ (UIViewController *)topController {
    
    UIViewController *topC = [self topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
    while (topC.presentedViewController) {
        topC = [self topViewController:topC.presentedViewController];
    }
    return topC;
}

+ (UIViewController *)topViewController:(UIViewController *)controller {
    if ([controller isKindOfClass:[UINavigationController class]]) {
        return [self topViewController:[(UINavigationController *)controller topViewController]];
    } else if ([controller isKindOfClass:[UITabBarController class]]) {
        return [self topViewController:[(UITabBarController *)controller selectedViewController]];
    } else {
        return controller;
    }
}

大体思路是获取到window的rootViewController 之后开始递归调用(UIViewController *)topViewController:(UIViewController *)controller这个方法,直到传入的控制不再是容器类控制器后返回。返回之后会检查处理present 这种情况。

效果

项目代码已经上传github 项目地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在开发中有可能会出现从任何页面跳转到某一个指定页面的需求,比如在使用应用时,突然推送过来一条消息,用户点击了之后就...
    张囧瑞阅读 3,596评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,533评论 4 61
  • 在开发中,我们可能会遇到类似这样的需求,在模态出的登录页面,再模态弹窗,直接进行弹窗是会出现警告的(无作用,) R...
    pinksnow阅读 4,952评论 0 2
  • 今天由于项目需要,需要获得当前屏幕上显示ViewController,所以上网找了一下,找到下面这个方法,但使用的...
    Terrnce阅读 12,331评论 1 6
  • 很多人都知道“拿来主义”是鲁迅先生的主张,他的拿是有选择的拿,为我所用的拿,不亢不卑的拿,取其精华,去其糟粕。 想...
    时慧慧爱物阅读 3,902评论 2 3

友情链接更多精彩内容