无论使用哪种控制器类型(
UIViewController
、UITableViewController
),以下行在 null
方法中始终会产生 ViewDidLoad
:
this.View.Window
这种行为正常吗,还是我做了什么奇怪的事情?什么会导致
UIViewController.View.Window
成为 null
?
(我想这个问题不仅涉及 MonoTouch,还涉及“普通”Objective-C Cocoa)。
(MonoTouch 5.2.11、Xcode 4.2.1 4D502)
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
}
代替
self.view.window
使用
[(YourAppDelegate *)[[UIApplication sharedApplication] delegate] window]
如果使用
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
}