Get the current view controller from the app delegate

前端 未结 11 1948
悲哀的现实
悲哀的现实 2020-11-30 22:46

i am new to ios. I need to know the current view controller from app delegate.. i have no idea about this and i don\'t knowto implement this. i am using this code toimplemn

11条回答
  •  無奈伤痛
    2020-11-30 23:07

    This is what I use for finding the current view controller that the user is most likely interacting with:

    UIViewController+Utils.h

    #import 
    
    @interface UIViewController (Utils)
    
    +(UIViewController*) currentViewController;
    
    @end
    

    UIViewController+Utils.m

    #import "UIViewController+Utils.h"
    
    @implementation UIViewController (Utils)
    
    +(UIViewController*) findBestViewController:(UIViewController*)vc {
    
        if (vc.presentedViewController) {
    
            // Return presented view controller
            return [UIViewController findBestViewController:vc.presentedViewController];
    
        } else if ([vc isKindOfClass:[UISplitViewController class]]) {
    
            // Return right hand side
            UISplitViewController* svc = (UISplitViewController*) vc;
            if (svc.viewControllers.count > 0)
                return [UIViewController findBestViewController:svc.viewControllers.lastObject];
            else
                return vc;
    
        } else if ([vc isKindOfClass:[UINavigationController class]]) {
    
            // Return top view
            UINavigationController* svc = (UINavigationController*) vc;
            if (svc.viewControllers.count > 0)
                return [UIViewController findBestViewController:svc.topViewController];
            else
                return vc;
    
        } else if ([vc isKindOfClass:[UITabBarController class]]) {
    
            // Return visible view
            UITabBarController* svc = (UITabBarController*) vc;
            if (svc.viewControllers.count > 0)
                return [UIViewController findBestViewController:svc.selectedViewController];
            else
                return vc;
    
        } else {
    
            // Unknown view controller type, return last child view controller
            return vc;
    
        }
    
    }
    
    +(UIViewController*) currentViewController {
    
        // Find best view controller
        UIViewController* viewController = [UIApplication sharedApplication].keyWindow.rootViewController;
        return [UIViewController findBestViewController:viewController];
    
    }
    
    @end
    

    Then whenever I need the current view controller from anywhere in the app simply use:

    [UIViewController currentViewController]
    

提交回复
热议问题