问题描述
我重写viewDidLoad两次。第二次,所以我可以设置一个委托。但是...没有被调用,因为myDel为零。为什么在具体类CoolTableController中没有调用我的重写?
protocol CoolTableProtocol {
//unrelevant code
}
class CoolTableViewController: UITableViewController {
var myDel: CoolProtocol!
override func viewDidLoad() {
super.viewDidLoad()
print("myDel")
//this should not be nil....yet it is
print(myDel)
}
}
class CoolTableController: CoolTableViewController,CoolTableProtocol {
override func viewDidLoad() {
self.myDel = self
super.viewDidLoad()
}
}
我所说的是:
let coolTableVC = CoolTableController()
mainView.addSubview(coolTableVC.view)
self.addChild(coolTableVC)
coolTableVC.didMove(toParent: self)
解决方法
请注意,ViewDidLoad
是生命周期函数,不会以编程方式触发,而只会在以下情况下触发
- viewDidLoad在控制器的视图加载到内存后调用。
创建UIViewController
的普通实例不会自行触发这些功能。
因此您可以像coolTableVC.view
这样调用let _ = coolTableVC.view
,因为该函数将在加载.view
之后触发。