13.获取啊当前显示的控制器

使用环境:
有些时候在一些界面经常性的需要出现弹窗,或者在一些界面添加一些东西,一般情况下像这种提示框都是加载在当前的Window上面,所以在实际的应用中经常出现弹窗出现在了不应该出现的界面,这个时候我们就可以获取一下当前界面的控制器来判断是否需要出现弹窗。
//获取Window当前显示的ViewController

- (UIViewController*)currentViewController{
    
    //获得当前活动窗口的根视图
    UIViewController* vc = [UIApplication sharedApplication].keyWindow.rootViewController;
    while (1)
    {
        //根据不同的页面切换方式,逐步取得最上层的viewController
        if ([vc isKindOfClass:[UITabBarController class]]) {
            vc = ((UITabBarController*)vc).selectedViewController;
        }
        if ([vc isKindOfClass:[UINavigationController class]]) {
            vc = ((UINavigationController*)vc).visibleViewController;
        }
        if (vc.presentedViewController) {
            vc = vc.presentedViewController;
        }else{
            break;
        }
    }
    
    NSLog(@"当前显示的界面是--%@",vc);
    return vc;
}

注:一般情况下window只有一个,但是也要注意自己的项目中window的数量。如果有多个,需要遍历一下,取出适合的window。

使用:

    BOOL isCurrentVC = [[self currentViewController] isKindOfClass:[RefuelSelectOrderViewController class]];
    if (!isCurrentVC) {
        return;
    }

在这里要注意 
 isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员
 isMemberOfClass只能确定一个对象是否是当前类的成员

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

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,178评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,936评论 0 17
  • 这算是《早起战争》的姊妹篇了,既然熬夜到现在依然不知道写点啥,那就写写和我有不解之缘的熬夜本身吧。 既然叫熬夜,那...
    皓语阅读 2,738评论 0 0
  • 在世嘉多年,苏珊和白松的过往,刘云鹏自然了如指掌,而白松对查小茶的感情,在这混乱的答谢宴中,老狐狸一般的刘云鹏也看...
    颗粒crown阅读 3,114评论 4 5
  • 首先贴一段代码: 贴但行代码: static void vfio_pci_dev_class_init(Objec...
    mqddb阅读 2,860评论 0 0

友情链接更多精彩内容