我有一个继承自UINavigationController
和UINavigationControllerDelegate
的课程。
我在viewDidLoad()
中设置了委托:
self.navigationController?.delegate = self
然而,当事物被推送到堆栈时,委托方法(例如willShow
,didShow
)不会被调用。
因此,在阅读过去的问题后,我尝试在初始化程序中设置委托,而不是viewDidLoad
。我已经尝试了一百万种组合,但它们要么无法编译,要么无法调用。
不会编译:
convenience init()
{
super.init()
self.navigationController?.delegate = self
}
不会编译:
convenience init()
{
init(rootViewController: self)
self.navigationController?.delegate = self
}
不会被称为
convenience init()
{
self.init()
self.navigationController?.delegate = self
}
依此类推,根据编译器说的问题来尝试问题。但编译器会说"添加self
来调用,"所以你添加它然后它说'#34;从呼叫中删除self
"等等等等。我尝试了数百万种组合,尝试搜索过去的问题并复制/粘贴初始化程序。我仍然无法正常工作。
答案 0 :(得分:1)
您需要使用self.delegate = self
,而不是self.navigationController?.delegate = self
,因为self
是UINavigationController
。
您正在尝试设置导航控制器导航控制器的代理。但你不是(也不可能)将导航控制器放在另一个导航控制器中。