zoukankan      html  css  js  c++  java
  • iOS 根据类名,获取已存在的controller,无论是模态出来还是push出来的controller,都可以找到

    我们在写代码时,有时会遇到:需要知道某个controller是否已经存在,或着,要拿到已存在的某个controller对象,这里提供一种可以获取到你想要的controller对象,只需要传入类名即可,废话不多说直接上代码:

    - (UIViewController *)getActivityViewController:(NSString *)controllerName {
        UIViewController *topVC = [UIApplication sharedApplication].keyWindow.rootViewController;
        while (topVC.presentedViewController) {
            topVC = topVC.presentedViewController;
            if ([[topVC.class description] isEqualToString:@"UINavigationController"]) {
                UINavigationController *navi = (UINavigationController *)topVC;
                if (navi && navi.viewControllers && navi.viewControllers.count > 0) {
                    NSInteger count = navi.viewControllers.count;
                    for (NSInteger i=count-1; i>=0; i--) {
                        UIViewController *controller = [navi.viewControllers objectAtIndex:i];
                        if ([[controller.class description] isEqualToString:controllerName]) {
                            return controller;
                        }
                    }
                }
            }
        }
        return nil;
    }

    如果当前存在的同一类名的controller有多个,你要拿到最新的一个可以用下面这种方法:

    - (UIViewController *)getActivityViewController:(NSString *)controllerName {
        UIViewController *topVC = [UIApplication sharedApplication].keyWindow.rootViewController;
        UIViewController *resaultVC = nil;
        while (topVC.presentedViewController) {
            topVC = topVC.presentedViewController;
            if ([[topVC.class description] isEqualToString:@"UINavigationController"]) {
                UINavigationController *navi = (UINavigationController *)topVC;
                if (navi && navi.viewControllers && navi.viewControllers.count > 0) {
                    NSInteger count = navi.viewControllers.count;
                    for (NSInteger i=count-1; i>=0; i--) {
                        UIViewController *controller = [navi.viewControllers objectAtIndex:i];
                        if ([[controller.class description] isEqualToString:controllerName]) {
                            resaultVC =  controller;
                        }
                    }
                }
            }
        }
        return resaultVC;
    }

    当然这两个方法的前提是,你如果是 present 出来的congtroller,并且导航控制器是 UINavigationController 类型,如果导航控制器是自定义的,那么在判断 if ([[topVC.class description] isEqualToString:@"UINavigationController"]) 时@"UINavigationController" 要替换成你自定义的类名即可。 

  • 相关阅读:
    Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用"轨道一次写入"还是"光盘一次写入"?
    日本比中国快一个小时,泰国比中国慢一个小时
    轻量级微服务全局架构图-来自于黄勇老师
    2018-2-13-win10-uwp-读写csv-
    2018-8-28-win10-uwp-MVVM入门
    2018-12-25-win10-uwp-显示SVG
    2018-8-27-C#-powshell-调用
    2019-9-2-visual-studio-2015-warning-MSB3246
    2018-10-2-win10-uwp-win2d-特效
    2019-9-2-生成密码
  • 原文地址:https://www.cnblogs.com/shisishao/p/5799367.html
Copyright © 2011-2022 走看看