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

首頁 > 系統(tǒng) > iOS > 正文

iOS 獲取當(dāng)前的ViewController的方法

2020-02-19 15:46:37
字體:
供稿:網(wǎng)友

我們在ios開發(fā)中,我們經(jīng)常需要獲取viewcontroller,下面就讓我們一起來看看武林技術(shù)頻道小編為大家介紹的iOS 獲取當(dāng)前的ViewController的方法,希望能幫到您。

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

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

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

根據(jù)iOS的類圖可以知道,UIViewController類還有好幾個派生類,需要我們?nèi)^(qū)分的就是UITabBarController跟UINavigationController,拿到它們不是我們想要的。

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

提供一個完整的方法:

+ (UIViewController *)getCurrentViewController {  UIViewController *result = nil;  UIWindow * window = [[UIApplication sharedApplication] keyWindow];  //app默認(rèn)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;}

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

以上就是由武林技術(shù)頻道小編帶來的iOS 獲取當(dāng)前的ViewController的方法?希望對大家有所幫助!如果你已經(jīng)知道怎么操作,那么你就趕快行動起來吧!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 扶余县| 屏边| 喀喇沁旗| 洛隆县| 津市市| 阿荣旗| 涞源县| 施秉县| 凤台县| 衡阳县| 青铜峡市| 岑巩县| 襄城县| 乃东县| 汶川县| 钟祥市| 三江| 滦南县| 潼南县| 恩施市| 漯河市| 维西| 常山县| 柳林县| 广汉市| 长岛县| 乡城县| 芒康县| 宾川县| 长白| 准格尔旗| 永昌县| 岫岩| 玛多县| 镇雄县| 尤溪县| 安宁市| 博湖县| 分宜县| 宁远县| 元朗区|