【发布时间】:2013-07-15 15:17:11
【问题描述】:
请澄清一些关于UIViewController的困惑
我找到了这篇文章Abusing UIViewController,这里是链接link1 & link2
及总结要点
这是作者(和 Apple)的建议 简而言之:
- 一个(并且只有一个)视图控制器应该负责整个 UIView 层次结构(或全屏)。
- 大多数情况下,每个屏幕只应使用一个视图控制器。本质上,当前
UIWindow中的rootViewController应该是唯一具有可见视图的UIViewController。 - 每个不同的屏幕都应该有一个不同的视图控制器,即一个控制器不能控制多个屏幕。
- 您不应在视图层次结构中嵌套自定义
UIViewControllers。 - 如果有多个
UIViewController挂在应用程序的UIWindow上,则只有其中一个会收到有关方向更改的消息。其他人不会收到这些消息。 - 嵌套的
UIViewControllers不能保证或可能接收有关方向变化的消息或生命周期消息,例如viewDidAppear:、viewWillAppear:、viewDidDisappear:和viewWillDisappear:,即使它们继承自UIViewController。只有最上面的UIViewController肯定会收到这些消息。
请清除第 2 点和第 3 点
因为当我们使用UINavigationController 或UITabBarController 时,我们使用UIViewController 的多个子类。而ios设备只有一个屏幕.....
本文Abusing UIViewController高亮苹果建议
注意:如果要将视图层次结构划分为多个子区域 并分别管理每一个,使用通用控制器对象(自定义 来自 NSObject 的对象)而不是视图控制器对象 管理每个分区。然后使用单个视图控制器对象 管理通用控制器对象。
在apple docs标题下Coordinating Efforts Between View Controllers苹果说
很少有 iOS 应用只显示一屏内容。相反,他们 首次启动时显示一些内容,然后显示和隐藏其他内容 响应用户操作的内容。这些转变提供了一个 显示大量内容的单一统一用户界面,只是没有 一下子......
我的要求是不使用任何容器或模态或弹出框,我想做手动管理,我有两个视图控制器VC1 和VC2。 VC1 是根视图控制器现在我想切换/中转/移动到VC2 我该怎么办?
VC1应该是UIViewController的唯一子类,而VC2应该是NSObject的子类来管理VC1层次结构中的特定视图?(Apple 文档显示隐藏的东西) .VC2也可以是UIViewController的子类,我只是从根视图中删除VC1,并添加VC2作为根视图?
或者正确的方法是什么?
【问题讨论】:
-
@rmaddy 请回复。
-
这些是开发应用程序架构时必须弄清楚的重要一般问题。你可以写一本关于这些基本主题的整本书。不要忘记,随着时间的推移,Apple 会利用 SDK,而昨天的答案并不总是能解决今天或明天的问题。我在一种情况下开发自己的容器视图控制器,当我不仅想在容器中使用子视图控制器,而且还想在没有父容器视图控制器的情况下将其用作功能齐全的视图控制器。
标签: ios uiviewcontroller