2017-05-05 70 views
0

我有一個繼承自UINavigationControllerUINavigationControllerDelegate的類。如何爲UINavigationController派生對象創建初始化程序?

我設置委託在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來調用」,所以添加它然後說「從調用中刪除self」等等。我嘗試了數百萬個組合,嘗試搜索過去的問題並複製/粘貼其初始化程序。我仍然無法得到任何工作。

回答

1

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

您正試圖設置導航控制器的導航控制器的代表。但是你沒有(也不能)將導航控制器放置在另一個導航控制器內。