UIWindow的rootViewController的問題

kim_jin發表於2018-01-25

在建立一個新的project後,在ViewController中新增如下程式碼:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.view.backgroundColor = [UIColor redColor];
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
    view.backgroundColor = [UIColor brownColor];
    [[UIApplication sharedApplication].delegate.window addSubview:view];
    [[UIApplication sharedApplication].delegate.window bringSubviewToFront:view];
}
複製程式碼

理所當然的認為,在當前螢幕上會是棕色的View蓋在紅色ViewController上面。可是到了執行的時候發現螢幕就顯示了一個紅色的View。

紅色View

棕色的View沒新增到?不太可能,程式也能執行到這裡

window是nil?更加不可能,為nil的話還怎麼新增ViewController

開啟層次檢視的時候,會發現其實棕色的view是被蓋住了:

層次檢視

但是如果為這個ViewController新增一個Nav什麼的,執行又是預想中的效果。

於是乎只能猜測,當單個ViewController作為rootViewController時,首先會先執行viewDidLoad方法,將整個View載入完畢後,才會新增到window上面。

相關文章