国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS 獲取當前的ViewController的方法

2020-07-26 02:40:17
字體:
來源:轉載
供稿:網友

本文介紹了iOS 獲取當前的ViewController,分享給大家。具體如下

通過簡單的判斷[UIViewController class],就認定它是想要的控制器是不對的:

if ([nextResponder isKindOfClass:[UIViewController class]]) {    result = nextResponder;}else {    result = window.rootViewController;}

因為:isKindOfClass:確定一個對象是否是一個類的成員,或者是派生自該類的成員。

根據iOS的類圖可以知道,UIViewController類還有好幾個派生類,需要我們去區分的就是UITabBarController跟UINavigationController,拿到它們不是我們想要的。

1)UITabBarController通過屬性viewControllers持有多個viewController;
2)UINavigationController通過壓棧和出棧的方式持有或去除viewController;
3)UITableViewController就不用去判斷了,它就是一個單個的viewController,而且更多的是手寫創建tableView。

提供一個完整的方法:

+ (UIViewController *)getCurrentViewController {  UIViewController *result = nil;  UIWindow * window = [[UIApplication sharedApplication] keyWindow];  //app默認windowLevel是UIWindowLevelNormal,如果不是,找到它  if (window.windowLevel != UIWindowLevelNormal) {    NSArray *windows = [[UIApplication sharedApplication] windows];    for(UIWindow * tmpWin in windows) {      if (tmpWin.windowLevel == UIWindowLevelNormal) {        window = tmpWin;        break;      }    }  }  id nextResponder = nil;  UIViewController *appRootVC = window.rootViewController;  //1、通過present彈出VC,appRootVC.presentedViewController不為nil  if (appRootVC.presentedViewController) {    nextResponder = appRootVC.presentedViewController;  }else{    //2、通過navigationcontroller彈出VC    NSLog(@"subviews == %@",[window subviews]);    UIView *frontView = [[window subviews] objectAtIndex:0];    nextResponder = [frontView nextResponder];  }  //1、tabBarController  if ([nextResponder isKindOfClass:[UITabBarController class]]){    UITabBarController * tabbar = (UITabBarController *)nextResponder;    UINavigationController * nav = (UINavigationController *)tabbar.viewControllers[tabbar.selectedIndex];    //或者 UINavigationController * nav = tabbar.selectedViewController;    result = nav.childViewControllers.lastObject;  }else if ([nextResponder isKindOfClass:[UINavigationController class]]){    //2、navigationController    UIViewController * nav = (UIViewController *)nextResponder;    result = nav.childViewControllers.lastObject;  }else{//3、viewControler    result = nextResponder;  }  return result;}

從上面代碼中,可以衍生出獲取當前tabBarController、navigationController,有時候可能就會用到。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 视频| 武邑县| 乐至县| 丹棱县| 宜丰县| 林西县| 重庆市| 武隆县| 若羌县| 巢湖市| 湟中县| 肇州县| 伊春市| 盐山县| 霍山县| 贵南县| 广德县| 察雅县| 集安市| 彭水| 佛教| 内黄县| 耿马| 北宁市| 岱山县| 楚雄市| 太谷县| 南部县| 格尔木市| 西乌| 泉州市| 灵璧县| 鄂托克前旗| 江山市| 凤山市| 泸州市| 阿鲁科尔沁旗| 锦屏县| 宁城县| 泉州市| 高碑店市|