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" 要替換成你自定義的類名即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM