使用环境:
有些时候在一些界面经常性的需要出现弹窗,或者在一些界面添加一些东西,一般情况下像这种提示框都是加载在当前的Window上面,所以在实际的应用中经常出现弹窗出现在了不应该出现的界面,这个时候我们就可以获取一下当前界面的控制器来判断是否需要出现弹窗。
//获取Window当前显示的ViewController
- (UIViewController*)currentViewController{
//获得当前活动窗口的根视图
UIViewController* vc = [UIApplication sharedApplication].keyWindow.rootViewController;
while (1)
{
//根据不同的页面切换方式,逐步取得最上层的viewController
if ([vc isKindOfClass:[UITabBarController class]]) {
vc = ((UITabBarController*)vc).selectedViewController;
}
if ([vc isKindOfClass:[UINavigationController class]]) {
vc = ((UINavigationController*)vc).visibleViewController;
}
if (vc.presentedViewController) {
vc = vc.presentedViewController;
}else{
break;
}
}
NSLog(@"当前显示的界面是--%@",vc);
return vc;
}
注:一般情况下window只有一个,但是也要注意自己的项目中window的数量。如果有多个,需要遍历一下,取出适合的window。
使用:
BOOL isCurrentVC = [[self currentViewController] isKindOfClass:[RefuelSelectOrderViewController class]];
if (!isCurrentVC) {
return;
}
在这里要注意
isKindOfClass来确定一个对象是否是一个类的成员,或者是派生自该类的成员
isMemberOfClass只能确定一个对象是否是当前类的成员