请清除一些关于UIViewController的混淆

时间:2013-07-15 15:17:11

标签: ios uiviewcontroller

请清除有关UIViewController

的一些混淆

我发现了这篇文章Abusing UIViewController,这里是链接link1& link2

和总结点

这是作者(和Apple的)建议简而言之:

  1. 一个(也是唯一一个)视图控制器应该负责UIViews的整个层次结构(或屏幕)。
  2. 大多数情况下,每个屏幕只能使用一个视图控制器。基本上,当前rootViewController的{​​{1}}应该是唯一具有可见视图的UIWindow
  3. 每个不同的屏幕应该有一个不同的视图控制器,即一个控制器不应该控制多个屏幕。
  4. 您不应在视图层次结构中嵌套自定义UIViewController
  5. 如果应用程序UIViewControllers中有多个UIViewController挂起,则其中只有一个会收到有关方向更改的消息。其他人不会收到这些消息。
  6. 无法保证或可能接收嵌套UIWindow来接收有关方向或生命周期消息更改的消息,例如UIViewControllersviewDidAppear:viewWillAppear:和{{1}即使他们继承自viewDidDisappear:。只有最顶层的viewWillDisappear:肯定会收到这些消息。
  7. 请清除第2和第3点 因为当我们使用UIViewControllerUIViewController时,我们会使用UINavigationController的多个子类。 ios设备只有一个屏幕.....

    这篇文章Abusing UIViewController突出了苹果的建议

      

    注意:如果要将视图层次结构划分为多个子区域   并分别管理每个,使用通用控制器对象(自定义   从NSObject下降的对象)而不是视图控制器对象   管理每个分区。然后使用单个视图控制器对象   管理通用控制器对象。

    并在UITabBarController标题下的UIViewController标题

      

    很少有iOS应用只展示一屏内容。相反,他们   首次启动时显示一些内容,然后显示和隐藏其他内容   响应用户操作的内容。这些过渡提供了一个   显示大量内容的单一统一用户界面,只是没有   一下子......

    我的要求是 NOT 使用任何容器或模态或popover,我想进行手动管理,我有两个视图控制器Coordinating Efforts Between View Controllers& VC1VC2是根视图控制器,现在我想切换/转接/移动到VC1我该怎么办?

    1. VC2应该是VC1的唯一子类,而UIViewController应该是VC2的子类来管理NSObject层次结构中的特定视图?(由苹果医生展示隐藏的东西)。

    2. VC1也可以是VC2的子类,我只是从根视图中删除UIViewController并以根视图添加VC1

      < / LI>

      或者正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

容器视图控制器(如UINavigationController)允许解决每个屏幕的一个VC规则。从iOS 5开始,开发人员已经能够并允许编写我们自己的容器控制器(实际上与普通VC没有太大区别)。通常,这意味着编写非VC控制器对象比以前更少。

在您想要替换根视图控制器的情况下,您的选项2更有意义。尽可能使用VC,而不能使用非VC控制器对象。由于您正在替换整个屏幕的内容,因此只需切换UIWindow rootViewController最有意义(编辑:交替地,许多开发人员只会使用导航控制器来呈现第二个视图,因为它简单方便)。