Xcode更新到13.5后,发现获取当前vc时,获取到的竟然是window。
解决:如图
![](https://img.haomeiwen.com/i3994117/48023096944546cc.png)
![](https://img.haomeiwen.com/i3994117/104097a49d29f3aa.png)
如下可复制代码:
//当前显示的控制器
+ (UIViewController *)getCurrentVC
{
UIViewController*result =nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
NSArray*windows = [[UIApplicationsharedApplication]windows];
for(UIWindow* tmpWininwindows)
{
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
//从根控制器开始查找
UIViewController*rootVC = window.rootViewController;
id nextResponder = [rootVC.view nextResponder];
if([nextResponder isKindOfClass:[UINavigationController class]]) {
result = ((UINavigationController*)nextResponder).topViewController;
if([resultis KindOfClass:[UITabBarController class]]) {
result = ((UITabBarController*)result).selectedViewController;
}
}else if([nextResponder isKindOfClass:[UITabBarController class]]) {
result = ((UITabBarController*)nextResponder).selectedViewController;
if([result isKindOfClass:[UINavigationController class]]) {
result = ((UINavigationController*)result).topViewController;
}
}else if([nextResponder isKindOfClass:[UIViewController class]]) {
result = nextResponder;
}else{
result = window.rootViewController;
if([result isKindOfClass:[UINavigationController class]]) {
result = ((UINavigationController*)result).topViewController;
if([result isKindOfClass:[UITabBarController class]]) {
result = ((UITabBarController*)result).selectedViewController;
}
}else if([result isKindOfClass:[UIViewController class]]) {
result = nextResponder;
}
}
returnresult;
}
网友评论