自定义容器视图控制器

7
我想创建自己的容器视图控制器,例如像UINavigationControllerUITabBarController这样的东西。文档说我不应该这么做,但为什么不能呢?导航和选项卡容器是证明这种方法可行且效果很好的良好示例。此外,我知道iPhone有小屏幕,人们不应该通过导航按钮等方式搞砸它,但在iPad上有很多空间,将其分裂成许多视图控制器将给我们带来巨大的机会。
我有一种感觉,苹果还没有添加这样的API,但他们会的。几天前,他们添加了关于iPad特定控制器(是的,容器控制器)的文档,并将文本修改得不再那么禁止使用。
无论如何...如果我尝试在一个屏幕上使用两个或多个视图控制器,我可能会遇到什么问题?我只知道其中一个将获得事件,例如方向更改或低内存警告,因此我必须将这些事件传递给包含的VC。我担心与未来版本的iOS兼容性问题,因为如果他们添加新事件,那么包含的VC将不会执行从UIViewController继承的默认操作。还有其他问题吗?您认为我的应用程式可能会被苹果拒绝吗?也许有其他方法可以使某些视图元素在每个屏幕上持久存在,而无需将大量相同的代码复制到每个VC中?
提前致谢。
2个回答

3

2

继承UINavigationController或UITabBarController是解决设备旋转问题的一种绝佳方式,但我不建议仅为了共享多个视图控制器中的子视图而这样做。

也许继承UIViewController才是您要寻找的方式。然后,在视图加载时,您可以从nib中加载共享视图,并在UIViewController子类中定义输出口,以及为处理事件添加任何支持代码。我自己就用这种方法添加了一个状态更新消息,我希望它能够出现在我的任何视图控制器的视图上。


我同意,苹果并不是说你不能构建自定义容器控制器,只是UINavigationController和UITabBarController并不是真正为子类化而构建的,如果你尝试这样做,结果可能会很奇怪。 - Kendall Helmstetter Gelner
基本上你必须对它们进行子类化才能让自动旋转在使用它们的应用中正常工作,而文档也没有警告不要对任何一个进行子类化,但我认为他并不需要为了他想做的事情而这样做。 - spstanley
是的,可以有两个视图控制器。我进行了测试,并成功将屏幕分成两部分:每个部分的按钮由不同的视图控制器处理。一切都正常工作,包括动画等。我只是担心副作用。苹果肯定有理由,为什么不允许在一个屏幕上使用多个视图控制器。事件可能会有问题,但我认为我可以处理它们。我想知道是否可能存在其他问题。 - broot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接