在自定义类中创建UINavigationController

时间:2011-09-27 11:19:10

标签: ios

我有一个模态视图控制器,它在我的应用程序的几个地方使用,并试图尽可能地应用于'DRY',想要封装经常重复的创意UINavigationController任务并删除视图控制器在里面。

基本上我试图复制Apple对MFMailComposeViewController做的事情。您可以简单地init此对象并以模态方式呈现它,并为您处理UINavigationController创建。

我尝试通过创建UINavigationController的子类(如MFMailComposeViewController所做)来模拟这个,然后在其中放入一个自定义的init方法,创建一个视图控制器,调用[super initWithViewController:]并提出建议本身就是VC。这会失败,因为initWithViewController:依次调用init方法并输入递归循环。

是否可以编写一个行为与MFMailComposeViewController相同的自定义类,并创建我自己的init方法,仍允许UINavigationController调用init方法预计?

1 个答案:

答案 0 :(得分:0)

你不应该试着把自己推到自己的导航堆栈上。您的导航控制器子类应在其init方法中创建一个单独的视图控制器,该控制器将成为导航堆栈的根视图控制器。

initWithRootViewController:的文档说:

  

这是一种方便的方法,用于初始化接收器并将根视图控制器推送到导航堆栈。每个导航堆栈必须至少有一个视图控制器作为根。

所以我想您可以在[super init]方法中拨打init,然后直接致电[self pushViewController:myRootController]。您还必须覆盖initWithRootViewController:并确保它调用您的init方法,忽略其参数。