美文网首页iOS Development
Object - C 获取最顶层控制器

Object - C 获取最顶层控制器

作者: 71150ce14a00 | 来源:发表于2017-03-03 16:45 被阅读9次

    .h文件

     #import <UIKit/UIKit.h>
    @interface UIApplication (ActivityViewController)
    - (UIViewController *)activityViewController;
    @end
    

    .m文件

    #import "UIApplication+ActivityViewController.h"
    @implementation UIApplication (ActivityViewController)
    - (UIViewController *)activityViewController {
    __block UIWindow *normalWindow = [self.delegate window];
    if (normalWindow.windowLevel != UIWindowLevelNormal) {
        [self.windows enumerateObjectsUsingBlock:^(__kindof UIWindow * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if (obj.windowLevel == UIWindowLevelNormal) {
                normalWindow = obj;
                *stop        = YES;
            }
        }];
    }
    
    return [self p_nextTopForViewController:normalWindow.rootViewController];
    }
    
    
    - (UIViewController *)p_nextTopForViewController:(UIViewController *)inViewController {
    while (inViewController.presentedViewController) {
    //        NSLog(@"-- 1 --->>>>%@",NSStringFromClass(inViewController.class));
        inViewController = inViewController.presentedViewController;
    //        NSLog(@"-- 2 --->>>>%@",NSStringFromClass(inViewController.class));
    }
    
    if ([inViewController isKindOfClass:[UITabBarController class]]) {
        UIViewController *selectedVC = [self p_nextTopForViewController:((UITabBarController *)inViewController).selectedViewController];
        return selectedVC;
    } else if ([inViewController isKindOfClass:[UINavigationController class]]) {
        UIViewController *selectedVC = [self p_nextTopForViewController:((UINavigationController *)inViewController).visibleViewController];
        return selectedVC;
    } else {
        return inViewController;
    }
    }
    @end

    相关文章

      网友评论

      本文标题:Object - C 获取最顶层控制器

      本文链接:https://www.haomeiwen.com/subject/gtdrgttx.html