美文网首页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