獲取當前最頂層的ViewController

最近學會了一個小小的黑科技,用于獲取當前最頂層的ViewController
原理是通過最底層的ViewController依次向上尋找,直到找到最頂層的ViewController,也就是從UIApplication的keyWindow的rootViewController開始尋找(如果有多個UIWindow則要考慮UIWindow的選擇問題)

在尋找的過程中,要分別考慮當前ViewController是UITabBarController和UINavigationController的情況,同時還要考慮到當前ViewController是否通過 presentViewController:animated:completion: 模態(tài)展示了其他ViewController。

代碼如下

- (UIViewController *)topViewController { 
  UIViewController *resultVC;
  resultVC = [self _topViewController:[[UIApplication sharedApplication].keyWindow rootViewController]]; 
  while (resultVC.presentedViewController) { 
    resultVC = [self _topViewController:resultVC.presentedViewController]; 
  }
   return resultVC;
}

- (UIViewController *)_topViewController:(UIViewController *)vc { 
  if ([vc isKindOfClass:[UINavigationController class]]) { 
    return [self _topViewController:[(UINavigationController *)vc topViewController]]; 
  }else if ([vc isKindOfClass:[UITabBarController class]]) {
     return [self _topViewController:[(UITabBarController *)vc selectedViewController]]; 
  } else {
     return vc;
  }
 return nil;
}

使用方法

UIViewController *topmostVC = [self topViewController];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容