欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS如何獲取最頂層ViewController詳解

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

1 獲取當前屏幕顯示的 Viewcontroller

//獲取當前屏幕顯示的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 {
  // 根視圖為非導航類 
  currentVC = rootVC;
 }
 
 return currentVC;
}

2 分析

2.1 UIApplication 的簡析

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

2.2  KeyWindow  的簡析

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

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

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

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

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

makeKeyAndVisible 與 makeKeyWindow 

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

becomeKeyWindow 與 resignKeyWindow

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

2.3 rootViewController屬性

顧名思義:當前窗口的根視圖

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

- (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)生成了一個新的window,加在了界面上面,所以keyWindow就會變成UIAlertControllerShimPresenterWindow這個類

2.4 PresentedViewController 簡析

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

  • 在有NavigationController導航欄的話,使用[self.navigationColler pushViewController:animated:] 進入到下一個視圖 ,使用[self.navigationController popViewControllerAnimated:] 返回到上一視圖。
  • 在沒有NavigationController導航欄的時候,使用[self presentViewController:animated:completion:] 進入到下一個視圖,使用 [self dismissViewControllerAnimated:completion:];返回到上一個視圖中。

presentedViewController 與  presentingViewController

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

總結

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

相關文章

  • iOS應用運用設計模式中的Strategy策略模式的開發(fā)實例

    iOS應用運用設計模式中的Strategy策略模式的開發(fā)實例

    這篇文章主要介紹了iOS應用開發(fā)中對設計模式中的Strategy策略模式的運用,例子采用傳統(tǒng)的Objective-C語言代碼演示,需要的朋友可以參考下
    2016-03-03
  • iOS開發(fā)UI篇—xib的簡單使用實例

    iOS開發(fā)UI篇—xib的簡單使用實例

    本篇文章主要介紹了iOS開發(fā)UI篇—xib的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • 解決IOS開發(fā)空字符串的方法

    解決IOS開發(fā)空字符串的方法

    這篇文章主要介紹了解決IOS開發(fā)空字符串的方法的相關資料,這里提供實例幫助大家解決改問題,需要的朋友可以參考下
    2017-08-08
  • IO實現(xiàn)計算器功能

    IO實現(xiàn)計算器功能

    這篇文章主要為大家詳細介紹了IOS基礎之計算器的編寫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • iOS模仿QQ側邊欄的實現(xiàn)方法實例

    iOS模仿QQ側邊欄的實現(xiàn)方法實例

    項目中要做側邊欄效果,網上諸多demo,都不是最理想的。最后決定自己來實現(xiàn)一個,所以下面這篇文章主要給大家介紹了關于利用iOS模仿QQ側邊欄的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • iOS?button響應流程圖文詳解

    iOS?button響應流程圖文詳解

    這篇文章主要為大家介紹了iOS?button響應流程圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • iOS 使用Moya網絡請求的實現(xiàn)方法

    iOS 使用Moya網絡請求的實現(xiàn)方法

    這篇文章主要介紹了iOS 使用Moya網絡請求的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • IOS self和super詳解實現(xiàn)原理及區(qū)別

    IOS self和super詳解實現(xiàn)原理及區(qū)別

    這篇文章主要介紹了iOS self和super詳解實現(xiàn)原理及區(qū)別的相關資料,這里不僅說明區(qū)別并介紹實現(xiàn)原理,具有參考價值,需要的朋友可以參考下
    2016-12-12
  • IOS textField限制字節(jié)長度

    IOS textField限制字節(jié)長度

    這篇文章主要介紹了IOS textField限制字節(jié)長度的相關資料,需要的朋友可以參考下
    2016-02-02
  • IOS開發(fā)教程之put上傳文件的服務器的配置及實例分享

    IOS開發(fā)教程之put上傳文件的服務器的配置及實例分享

    IOS開發(fā)給人一種高大上的趕腳,弄的好像你不會IOS就不是個合格的程序員一樣,好吧,既然是大趨勢,那我們就來學習下吧,今天來看看put上傳文件的服務器配置及案例
    2014-06-06

最新評論