gpt4 book ai didi

swift - UINavigationController(rootViewController : MyViewController()) triggers viewdidLoad and returns nil navigationController

转载 作者:行者123 更新时间:2023-11-28 13:35:43 26 4
gpt4 key购买 nike

我试图理解使用初始化程序初始化 UINavigationController 背后的逻辑:

UINavigationController(rootViewController: MyViewController())

我正在修改的应用程序使用了这个初始化器和 MyViewController 我拥有的自定义初始化器:

class MyViewController:UIViewController{

init(){
super.init(nibName: "MyViewController", bundle: nil)
}

}

MyViewController 生命周期方法中,viewDidLoad 过去的 navigationController 值不是nil

我所做的唯一更改是在自定义初始化程序中。现在:

init(){
super.init(nibName: nil, bundle: nil)

/*EDIT*/
let dummyMe = UIView()
view.addSubview(dummyMe)

}

换句话说,我不想使用 xib 文件。这一更改让我陷入崩溃,经过一些调试,我意识到 navigationController 值在 viewDidLoad 方法中为 nil,但在我的 viewWillAppear 方法中却没有。

这怎么可能? UINavigationController 初始化程序是否应该调用 viewDidLoad?为什么 navigationController 现在的值为 nil

谢谢

最佳答案

你应该检查你的代码。示例按预期工作,您可以将其粘贴到 Playground 上:

import UIKit
import PlaygroundSupport

class MyViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
print(#function)
print(navigationController)
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print(#function)
print(navigationController)
}
}

let controller = UINavigationController(rootViewController: MyViewController())

此代码不会触发生命周期方法。添加PlaygroundPage.current.liveView = controller.view触发并查看:

viewDidLoad()
Optional(<UINavigationController: 0x7ffb18001200>)
viewWillAppear
Optional(<UINavigationController: 0x7ffb18001200>)

更新:

添加自定义 View 覆盖loadView:

override func loadView() {
super.loadView()
let subviewFrame = view.bounds
let dummyMe = UIView(frame: subviewFrame)
dummyMe.autoresizingMask = [.flexibleHeight, .flexibleWidth]
dummyMe.backgroundColor = .yellow
view.addSubview(dummyMe)
}

甚至:

override func loadView() {   
let dummyMe = UIView()
dummyMe.backgroundColor = .yellow
view = dummyMe
}

关于swift - UINavigationController(rootViewController : MyViewController()) triggers viewdidLoad and returns nil navigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com