iOS開發-獲取rootViewController的正確方式

GabrielPanda發表於2019-02-26

獲取工程中window上面的RootViewController keyWindow是,在windows陣列中最近時間呼叫makeKeyAndVisible方法的屬性。

方法一:建議使用

AppDelegate *app =(AppDelegate *) [UIApplication sharedApplication].delegate;
UIViewController *rootViewController1 = appdelegate.window.rootViewController;
複製程式碼
AppDelegate *appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    if ([appdelegate.window.rootViewController isKindOfClass:["xxxrootVC" class]] == YES) {
        // 這樣更保險
    }
複製程式碼

方法二:不建議使用

UIAlertController或UIAlertView或UIActionSheet彈出後,keyWindow就會變成UIAlertControllerShimPresenterWindow這個類

UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *rootViewController2 = window.rootViewController;
複製程式碼

alertView的出現是因為,生成了一個新的window,加在了介面上面。 這個時候獲取到的keyWindow就是UIAlertControllerShimPresenterWindow。

相關文章