ViewDidLoad方法中UIViewController.View.Window为null

问题描述 投票:0回答:4

无论使用哪种控制器类型(

UIViewController
UITableViewController
),以下行在
null
方法中始终会产生
ViewDidLoad

this.View.Window

这种行为正常吗,还是我做了什么奇怪的事情?什么会导致

UIViewController.View.Window
成为
null

(我想这个问题不仅涉及 MonoTouch,还涉及“普通”Objective-C Cocoa)。

(MonoTouch 5.2.11、Xcode 4.2.1 4D502)

iphone ios cocoa-touch xamarin.ios
4个回答
37
投票

根据 UIView 的文档,如果视图尚未添加到窗口(调用

window
时就是这种情况),则
nil
属性为
viewDidLoad


7
投票

self.view.window
将在 viewDidAppear 中可用:

override func viewDidAppear(_ animated: Bool) {
    print(self.view.window)
    let vc = self.storyboard?.instantiateViewController(identifier: "SecondViewController") as? SecondViewController
    self.view.window?.rootViewController = vc
}

5
投票

代替

self.view.window
使用

[(YourAppDelegate *)[[UIApplication sharedApplication] delegate] window]

0
投票

如果使用

UIScene
,你可以从
viewWillAppear
获取窗口,如下所示:

    func windowByParent(vc: UIViewController) -> UIWindow? {
        var window: UIWindow? = nil
        var parent: UIViewController? = vc
        
        while parent != nil && window == nil {
            window = parent?.view.window
            parent = parent?.parent
        }
        return window
    }
© www.soinside.com 2019 - 2024. All rights reserved.