【问题标题】:Custom container view controller自定义容器视图控制器
【发布时间】:2011-05-15 04:31:51
【问题描述】:

我想创建自己的容器视图控制器,例如 UINavigationControllerUITabBarController。医生说我不应该那样做,但为什么不呢?导航和标签栏容器是很好的例子,说明这种事情是可能的并且工作得很好。另外我知道 iPhone 的屏幕很小,人们不应该通过导航按钮等来搞砸它,但在 iPad 上空间很大,将其拆分为多个视图控制器会给我们带来很大的机会。

我感觉 Apple 尚未添加此类 API,但他们会添加。几天前,他们添加了有关 iPad 专用控制器(是的,容器控制器)的文档,并将文本修改为不那么令人生畏的内容。

无论如何...如果我尝试在一个屏幕上使用两个或多个视图控制器,我可能会遇到什么问题?我知道其中只有一个会收到诸如方向更改或内存不足警告之类的事件,因此我必须将这些事件传递给包含的 VC。我担心与未来版本的 iOS 的兼容性,因为如果他们会添加新事件,那么包含的 VC 将不会执行从 UIViewController 继承的默认操作。还要别的吗?您认为我的应用程序可能会被 Apple 拒绝吗?也许还有其他方法可以让一些视图元素在每个屏幕上持久化,而无需将大量相同的代码复制到每个 VC?

提前致谢。

【问题讨论】:

    标签: iphone ipad ios uiviewcontroller


    【解决方案1】:

    现在 iOS5 支持此功能。有关示例代码,请参阅此问题:Container View Controller Examples

    【讨论】:

      【解决方案2】:

      子类化 UINavigationController 或 UITabBarController 是处理设备旋转问题的好方法,但我不建议专门这样做来共享来自多个视图控制器的子视图。

      也许子类化 UIViewController 是您正在寻找的。然后,当视图加载后,您可以从 nib 加载共享视图并在 UIViewController 子类中定义插座,并将任何支持代码添加到您的子类以处理事件。我自己这样做是为了添加一条我希望能够出现在我的任何视图控制器的视图上的状态更新消息。

      【讨论】:

      • 我同意,Apple 并不是说​​您不应该构建自定义容器控制器,只是 UINavigationController 和 UITabBarController 并不是真正为子类而构建的,如果您尝试,结果可能会很奇怪。
      • 您基本上必须对它们进行子类化才能在使用它们的应用程序中实现自动旋转,并且文档没有警告不要对任何一个进行子类化,但我认为他不需要为他正在尝试的事情去做。
      • 是的,可以有两个 VC。我进行了测试并成功地将屏幕分成两部分:每个部分的按钮由不同的 VC 处理。一切正常,包括动画等。我只是害怕副作用。苹果必须有一个理由,为什么他们不允许在一个屏幕上使用多个 VC。事件可能是有问题的,但我想我可以处理它们。不知会不会有其他问题。
      猜你喜欢
      • 2023-03-25
      • 2021-12-31
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多