我正在构建一个自定义的UINavigationController(没有子类化它,我为此子类UIViewController),我希望将UIViewController的实例添加到我的自定义navigationController中,以便在访问自定义导航控制器时获取对自定义导航控制器的引用self.navigationController。我是
您可以从属于UINavigationController的UIViewController执行此操作,将新的视图控制器推送到堆栈:
MyViewController *myVC = [[MyViewController alloc] init];
[self.navigationController pushViewController:myVC animated:YES];
[myVC release];
我想模仿这种行为。优选地,通过不涉及向UIViewController添加代码的设计模式。 因此,在上面的情况下,当自定义导航控制器将控制器推送到它时,它将在pushViewController方法中将navigationController设置为自定义控制器(它自己),以便在新添加的视图控制器执行自我操作时。 navigationController它还将获得对自定义nav-controller的引用。
涉及到一些陷阱。即使自定义导航控制器正在显示添加的viewController,[self parentViewController]
在继承UIViewController
时也不起作用。如果它确实我可以去
[[self parentViewController] pushViewController...
来自我添加的UIViewController
。
self.navigationController
是只读的,因此我无法手动设置,即使可以,我也必须将其设置为[self parentViewController]
,这是我无法进行的。
我曾计划在UIViewController上构建一个类别(我的项目只会使用自定义的navigationController,所以没有碰撞的可能性)。但是他的方法遇到了上面提到的问题,我无法从这些添加的控制器中获得对拥有推送的UIViewController的Custom UINavigationController的引用。我必须构建协议并将CustomNavigationController设置为每个UIViewControllers上的委托,因此非常强大地耦合它并使这些UIViewControllers仅与我的自定义Nav控制器一起工作。
我希望很清楚我想要实现的目标,我需要在Objective C中获得更多的设计模式经验,以便我自己看到这一点。
感谢您给予的任何帮助/建议:)
答案 0 :(得分:0)
我不知道你是否想到这一点,但我正在努力解决我认为的同样问题。例如。默认的iPad拆分视图应用程序有一个RootViewController(用于弹出窗口)和一个DetailViewController,它在弹出窗口下面有视图,或者当iPad倾斜时有视图(横向)。我想从弹出窗口中选择并根据RootViewController的选择驱动填充详细视图的各个控制器。我还没弄明白。如果您有任何见解,请发布。如果我在这里遇到任何出色的设计,我也会这样做。