@interface UIWindow (CurrentViewController)
/*!
@method currentViewController
@return Returns the topViewController in stack of topMostController.
*/
+ (UIViewController*)zf_currentViewController;
@end
@implementation UIWindow (CurrentViewController)
+ (UIViewController*)zf_currentViewController; {
__block UIWindow *window;
if (@available(iOS 13, *)) {
[[UIApplication sharedApplication].connectedScenes enumerateObjectsUsingBlock:^(UIScene * _Nonnull scene, BOOL * _Nonnull scenesStop) {
if ([scene isKindOfClass: [UIWindowScene class]]) {
UIWindowScene * windowScene = (UIWindowScene *)scene;
[windowScene.windows enumerateObjectsUsingBlock:^(UIWindow * _Nonnull windowTemp, NSUInteger idx, BOOL * _Nonnull windowStop) {
if ([windowTemp isKeyWindow]) {
window = windowTemp;
*windowStop = true;
*scenesStop = true;
}
}];
}
}];
} else {
window = [[UIApplication sharedApplication].delegate window];
}
UIViewController *topViewController = [window rootViewController];
while (true) {
if (topViewController.presentedViewController) {
topViewController = topViewController.presentedViewController;
} else if ([topViewController isKindOfClass:[UINavigationController class]] && [(UINavigationController *)topViewController topViewController]) {
topViewController = [(UINavigationController *)topViewController topViewController];
} else if ([topViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tab = (UITabBarController *)topViewController;
topViewController = tab.selectedViewController;
} else {
break;
}
}
return topViewController;
}
@end版权声明:本文为weixin_38934440原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。