我有一个模态视图控制器,它在我的应用程序的几个地方使用,并试图尽可能地应用于'DRY',想要封装经常重复的创意UINavigationController任务并删除视图控制器在里面。
基本上我试图复制Apple对MFMailComposeViewController
做的事情。您可以简单地init
此对象并以模态方式呈现它,并为您处理UINavigationController创建。
我尝试通过创建UINavigationController
的子类(如MFMailComposeViewController
所做)来模拟这个,然后在其中放入一个自定义的init方法,创建一个视图控制器,调用[super initWithViewController:]
并提出建议本身就是VC。这会失败,因为initWithViewController:
依次调用init
方法并输入递归循环。
是否可以编写一个行为与MFMailComposeViewController
相同的自定义类,并创建我自己的init
方法,仍允许UINavigationController
调用init
方法预计?
答案 0 :(得分:0)
你不应该试着把自己推到自己的导航堆栈上。您的导航控制器子类应在其init方法中创建一个单独的视图控制器,该控制器将成为导航堆栈的根视图控制器。
initWithRootViewController:
的文档说:
这是一种方便的方法,用于初始化接收器并将根视图控制器推送到导航堆栈。每个导航堆栈必须至少有一个视图控制器作为根。
所以我想您可以在[super init]
方法中拨打init
,然后直接致电[self pushViewController:myRootController]
。您还必须覆盖initWithRootViewController:
并确保它调用您的init
方法,忽略其参数。