最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS如何獲取最頂層ViewController詳解

 更新時(shí)間:2020年09月07日 08:58:44   作者:早起的年輕人  
這篇文章主要給大家介紹了關(guān)于iOS如何獲取最頂層ViewController的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1 獲取當(dāng)前屏幕顯示的 Viewcontroller

//獲取當(dāng)前屏幕顯示的viewcontroller
- (UIViewController *)getCurrentVC
{
 ///下文中有分析
 UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
 UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
 return currentVC;
}

- (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC
{
 UIViewController *currentVC;
 if ([rootVC presentedViewController]) {
  // 視圖是被presented出來的
  rootVC = [rootVC presentedViewController];
 }

 if ([rootVC isKindOfClass:[UITabBarController class]]) {
  // 根視圖為UITabBarController
  currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]]; 
 } else if ([rootVC isKindOfClass:[UINavigationController class]]){
  // 根視圖為UINavigationController
  currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]]; 
 } else {
  // 根視圖為非導(dǎo)航類 
  currentVC = rootVC;
 }
 
 return currentVC;
}

2 分析

2.1 UIApplication 的簡析

UIApplication的核心作用是提供了iOS程序運(yùn)行期間的控制和協(xié)作工作,每一個(gè)程序在運(yùn)行期必須有且僅有一個(gè)UIApplication(或則其子類)的一個(gè)實(shí)例,在程序啟動運(yùn)行時(shí),會在 main 函數(shù)中創(chuàng)建一個(gè) UIApplication的單例實(shí)例,在代碼中可以通過調(diào)用[UIApplication sharedApplication]來得到這個(gè)單例實(shí)例的指針。

2.2  KeyWindow  的簡析

在簡析 KeyWindow 前我們先來看一看 UIWindow 的概念

UIWindow 是 UIView 的子類,其在 UIView 添加了一些視圖層級,管理視圖,轉(zhuǎn)發(fā) UIEvent 對象的屬性和 Method 等等

在上述實(shí)例中,我們通過  [UIApplication sharedApplication] 來獲取的 UIApplication 的單例實(shí)例對象,然后通過實(shí)例對象的 keyWindow再獲取到當(dāng)前活躍的window(或者說是當(dāng)前顯示的主窗口).

KeyWindow 即指在IOS開發(fā)中活躍窗口,即能接到鍵盤和非觸摸事件的一個(gè)窗口,一次只能有一個(gè)KeyWindow,在IOS 開發(fā)中,我們可以通過設(shè)置UIWindowLevel的數(shù)值來設(shè)置最前端的窗口為哪個(gè),Level數(shù)值越高的窗口越靠前,如果兩個(gè)窗口的Level等級相同,則我們可以通過makeKeyAndVisible來顯示KeyWindow

(void)makeKeyWindow;//讓當(dāng)前UIWindow變成keyWindow(主窗口)
(void)makeKeyAndVisible;//讓當(dāng)前UIWindow變成keyWindow,并顯示出來
[UIApplication sharedApplication].windows //獲取當(dāng)前應(yīng)用的所有的UIWindow
[UIApplication sharedApplication].keyWindow //獲取當(dāng)前應(yīng)用的主窗口
view.window ///獲得某個(gè)UIView所在的UIWindow

makeKeyAndVisible 與 makeKeyWindow 

  • makeKeyWindow: 只做了一件事就是使當(dāng)前窗口成為主要窗口。 當(dāng)前窗口不一定顯示出來
  • makeKeyAndVisible : 做了兩件事使當(dāng)前窗口成為主要窗口并顯示當(dāng)前窗口。如果只想顯示的話,我們還可以通過設(shè)置其屬性hidden為 NO 即可。=

becomeKeyWindow 與 resignKeyWindow

  • becomeKeyWindow: 程序自動調(diào)用,用來通知其他窗口 當(dāng)前容器已被設(shè)置為主窗口。 我們不要主動調(diào)用此方法, 此方法是系統(tǒng)自動調(diào)用的來發(fā)通知的,此方法的默認(rèn)實(shí)現(xiàn)不執(zhí)行任何操作,但子類可以覆蓋它并使用它來執(zhí)行與成為關(guān)鍵窗口相關(guān)的任務(wù)。
  • resignKeyWindow: 類似becomeKeyWindow, 其是調(diào)用以通知窗口它將要注銷掉主鍵窗口的身份.同樣的切勿直接調(diào)用此方法。

2.3 rootViewController屬性

顧名思義:當(dāng)前窗口的根視圖

目前只有UIWindow有rootViewController這個(gè)屬性,不要跟UINavigationController里面的根視圖概念混淆。
UINavigationController其實(shí)并沒有 rootViewController這個(gè)屬性!也就沒有自帶的setter方法。要設(shè)置其根視圖只能通過如下方法

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController; 

獲取 uiwindow的根視圖

方式一

AppDelegate *app =(AppDelegate *) [UIApplication sharedApplication].delegate;
UIViewController *rootViewController1 = appdelegate.window.rootViewController;

方式二

UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *rootViewController2 = window.rootViewController;

需要注意的是:

在方式二中,UIAlertController、UIAlertView、UIActionSheet彈出后,上述這些View 出現(xiàn)生成了一個(gè)新的window,加在了界面上面,所以keyWindow就會變成UIAlertControllerShimPresenterWindow這個(gè)類

2.4 PresentedViewController 簡析

在 ios 開發(fā)中,一般頁面的組成有 NavigationController  或者 其他的 UiViewController、UITabViewController 等等,

  • 在有NavigationController導(dǎo)航欄的話,使用[self.navigationColler pushViewController:animated:] 進(jìn)入到下一個(gè)視圖 ,使用[self.navigationController popViewControllerAnimated:] 返回到上一視圖。
  • 在沒有NavigationController導(dǎo)航欄的時(shí)候,使用[self presentViewController:animated:completion:] 進(jìn)入到下一個(gè)視圖,使用 [self dismissViewControllerAnimated:completion:];返回到上一個(gè)視圖中。

presentedViewController 與  presentingViewController

案例說明 A.presentedViewController A控制器跳轉(zhuǎn)到B控制器;B.presentingViewController 就是返回到A控制器。

總結(jié)

到此這篇關(guān)于iOS如何獲取最頂層ViewController的文章就介紹到這了,更多相關(guān)iOS獲取最頂層ViewController內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析iOS10中的極光推送消息的適配

    解析iOS10中的極光推送消息的適配

    這篇文章主要介紹了解析iOS10中的極光推送消息的適配的相關(guān)資料,我們需要先安裝Xcode8.0版本,接下來本文分步驟詳細(xì)給大家介紹,需要的朋友可以參考下
    2016-09-09
  • iOS CoreData 增刪改查詳解

    iOS CoreData 增刪改查詳解

    這篇文章主要為大家詳細(xì)介紹了iOS CoreData 增刪改查的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解iOS開發(fā)中Keychain的相關(guān)使用

    詳解iOS開發(fā)中Keychain的相關(guān)使用

    這篇文章主要介紹了iOS開發(fā)中Keychain的相關(guān)使用,文中列舉了一個(gè)使用Keychain來保存密碼的例子,需要的朋友可以參考下
    2015-10-10
  • iOS 開發(fā)之 - 關(guān)閉鍵盤 退出鍵盤 的5種方式

    iOS 開發(fā)之 - 關(guān)閉鍵盤 退出鍵盤 的5種方式

    這篇文章主要介紹了iOS 開發(fā)之 - 關(guān)閉鍵盤 退出鍵盤 的5種方式的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例

    詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例

    這篇文章主要介紹了詳解IOS串行隊(duì)列與并行隊(duì)列進(jìn)行同步或者異步的實(shí)例的相關(guān)資料,IOS中GCD的隊(duì)列分為串行隊(duì)列和并行隊(duì)列,任務(wù)分為同步任務(wù)和異步任務(wù),他們的排列組合有四種情況這里就一一分析下,需要的朋友可以參考下
    2017-07-07
  • IOS  Swift3 四種單例模式詳解及實(shí)例

    IOS Swift3 四種單例模式詳解及實(shí)例

    這篇文章主要介紹了IOS Swift3 四種單例模式詳解及實(shí)例的相關(guān)資料,這里對四種單例模式進(jìn)行了實(shí)例介紹 ,需要的朋友可以參考下
    2016-12-12
  • iOS開發(fā)輸入自動填充UITextField背景色

    iOS開發(fā)輸入自動填充UITextField背景色

    如何在iOS中實(shí)現(xiàn)輸入時(shí)自動填充背景色的效果,首先,我們設(shè)置UITextField的背景色為初始顏色,然后,通過設(shè)置UITextField的代理,并監(jiān)聽UITextField的輸入事件,我們在用戶開始輸入時(shí)將其背景色改變?yōu)楦吡令伾?在用戶結(jié)束輸入時(shí)恢復(fù)為初始顏色
    2023-10-10
  • iOS 9無法訪問HTTP的解決方法

    iOS 9無法訪問HTTP的解決方法

    這篇文章主要為大家詳細(xì)介紹了iOS 9無法訪問HTTP的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 如何在 iOS 應(yīng)用中添加位置信息

    如何在 iOS 應(yīng)用中添加位置信息

    這篇文章主要介紹了如何在 iOS 應(yīng)用中添加位置信息,幫助大家更好的理解和學(xué)習(xí)使用ios,感興趣的朋友可以了解下
    2021-02-02
  • IOS開發(fā)相冊圖片多選和刪除的功能

    IOS開發(fā)相冊圖片多選和刪除的功能

    之前小編有和大家分享過一篇關(guān)于從相冊選取單張照片的文章,那么下面這篇文章跟大家分享下如何相冊多圖選擇和刪除,以及包括拍照功能,有需要的可以參考學(xué)習(xí),下面來一起看看吧。
    2016-09-09

最新評論

德昌县| 吴堡县| 临桂县| 明水县| 丰顺县| 河间市| 五常市| 扎兰屯市| 项城市| 孟津县| 廉江市| 大石桥市| 广南县| 彭山县| 米脂县| 苏尼特右旗| 延庆县| 鸡东县| 淅川县| 射阳县| 南通市| 台安县| 宁河县| 东方市| 潞西市| 保康县| 刚察县| 儋州市| 南和县| 罗城| 新安县| 西藏| 新乡县| 遵化市| 鄄城县| 阜城县| 远安县| 巴楚县| 云霄县| 渭南市| 黄山市|