如何为UINavigationController派生对象创建初始值设定项?

时间:2017-05-05 16:28:51

标签: ios swift uinavigationcontroller subclassing

我有一个继承自UINavigationControllerUINavigationControllerDelegate的课程。

我在viewDidLoad()中设置了委托:

self.navigationController?.delegate = self

然而,当事物被推送到堆栈时,委托方法(例如willShowdidShow)不会被调用。

因此,在阅读过去的问题后,我尝试在初始化程序中设置委托,而不是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"等等等等。我尝试了数百万种组合,尝试搜索过去的问题并复制/粘贴初始化程序。我仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

您需要使用self.delegate = self,而不是self.navigationController?.delegate = self,因为selfUINavigationController

您正在尝试设置导航控制器导航控制器的代理。但你不是(也不可能)将导航控制器放在另一个导航控制器中。