使用環(huán)境:
有些時(shí)候在一些界面經(jīng)常性的需要出現(xiàn)彈窗,或者在一些界面添加一些東西荔棉,一般情況下像這種提示框都是加載在當(dāng)前的Window上面垫蛆,所以在實(shí)際的應(yīng)用中經(jīng)常出現(xiàn)彈窗出現(xiàn)在了不應(yīng)該出現(xiàn)的界面呵哨,這個(gè)時(shí)候我們就可以獲取一下當(dāng)前界面的控制器來判斷是否需要出現(xiàn)彈窗泉坐。
//獲取Window當(dāng)前顯示的ViewController
- (UIViewController*)currentViewController{
//獲得當(dāng)前活動(dòng)窗口的根視圖
UIViewController* vc = [UIApplication sharedApplication].keyWindow.rootViewController;
while (1)
{
//根據(jù)不同的頁面切換方式,逐步取得最上層的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(@"當(dāng)前顯示的界面是--%@",vc);
return vc;
}
注:一般情況下window只有一個(gè)辜伟,但是也要注意自己的項(xiàng)目中window的數(shù)量氓侧。如果有多個(gè),需要遍歷一下导狡,取出適合的window约巷。
使用:
BOOL isCurrentVC = [[self currentViewController] isKindOfClass:[RefuelSelectOrderViewController class]];
if (!isCurrentVC) {
return;
}
在這里要注意
isKindOfClass來確定一個(gè)對(duì)象是否是一個(gè)類的成員,或者是派生自該類的成員
isMemberOfClass只能確定一個(gè)對(duì)象是否是當(dāng)前類的成員