iOS OC 獲得當前顯示的控制器
我觀察到點擊mac版微信啟動頁面中的登錄按鈕時,手機端的微信都會present
出一個確認頁面。細致研究時會發(fā)現如果手機端當前停留的頁面是被present
出來的話腰鬼,此時是不會彈出確認頁面的劣领。
今天我們討論一下浓恳,如何獲取當前顯示的控制器琢感。
mac微信啟動頁面
+ (UIViewController *)topController {
UIViewController *topC = [self topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]];
while (topC.presentedViewController) {
topC = [self topViewController:topC.presentedViewController];
}
return topC;
}
+ (UIViewController *)topViewController:(UIViewController *)controller {
if ([controller isKindOfClass:[UINavigationController class]]) {
return [self topViewController:[(UINavigationController *)controller topViewController]];
} else if ([controller isKindOfClass:[UITabBarController class]]) {
return [self topViewController:[(UITabBarController *)controller selectedViewController]];
} else {
return controller;
}
}
大體思路是獲取到window
的rootViewController 之后開始遞歸調用(UIViewController *)topViewController:(UIViewController *)controller
這個方法,直到傳入的控制不再是容器類控制器后返回糕殉。返回之后會檢查處理present 這種情況亩鬼。
效果
項目代碼已經上傳github 項目地址