2011-09-27 83 views
0

我有一個模式視圖控制器,它在我的應用程序的幾個地方使用,爲了嘗試儘可能地應用'幹',想封裝創意a的重複任務UINavigationController並將視圖控制器放入其中。在自定義類中創建UINavigationController

本質上我試圖複製蘋果公司做的MFMailComposeViewController。您可以簡單地使用init這個對象,並以模態方式呈現它,併爲您處理UINavigationController創建。

我試圖創建一個子類的UINavigationController效仿這種(如MFMailComposeViewController一樣),然後把自定義的初始化方法創建一個視圖控制器,來電[super initWithViewController:]並提出自己作爲VC。這失敗了,因爲initWithViewController:依次調用init方法,我們進入遞歸循環。

是否有可能編寫的工作方式MFMailComposeViewController不和創建自己的init方法仍然允許UINavigationController調用init方法,預計自定義類?

回答

0

你不應該試圖推動自己的導航堆棧。您的導航控制器子類應在其init方法中創建一個單獨的視圖控制器,該控制器將成爲導航堆棧的根視圖控制器。

initWithRootViewController:文檔說:

這是用於初始化接收機和推根視圖控制器到導航堆棧的便捷方法。每個導航堆棧必須至少有一個視圖控制器充當根。

所以我想你可以叫[super init]init方法,然後調用[self pushViewController:myRootController]直接算賬。您還必須覆蓋initWithRootViewController:並確保它調用您的init方法,忽略它的論點。

+0

* facepalm *當然。正如它應該的那樣工作,非常感謝。 – andybee