0

请澄清一些关于UIViewController

我找到了这篇文章Abusing UIViewController,这里是链接链接1链接2

和总结点

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

  1. 一个(并且只有一个)视图控制器应该负责 UIView 的整个层次结构(或全屏)。
  2. 大多数情况下,您应该每个屏幕只使用一个视图控制器。本质上rootViewController,当前的UIWindow应该是唯一UIViewController具有可见视图的。
  3. 每个不同的屏幕应该有一个不同的视图控制器,即一个控制器不能控制多个屏幕。
  4. 您不应该UIViewControllers在视图层次结构中嵌套自定义。
  5. 如果不止一个UIViewController挂起应用程序的UIWindow,则只有其中一个会收到有关方向更改的消息。其他人将不会收到这些消息。
  6. 嵌套UIViewControllers不能保证或可能接收有关方向更改或生命周期消息(例如viewDidAppear:, )的消息viewWillAppear:,即使它们继承自. 只有最上面的人肯定会收到这些消息。viewDidDisappear:viewWillDisappear:UIViewControllerUIViewController

请清除第 2 点和第 3 点, 因为当我们使用UINavigationControllerUITabBarController使用UIViewController. 而ios设备只有一个屏幕......

本文Abusing UIViewController高亮苹果建议

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

苹果文档Coordinating Efforts Between View Controllers中,在苹果的标题下

很少有 iOS 应用程序只显示一屏内容。相反,它们在首次启动时显示一些内容,然后显示和隐藏其他内容以响应用户操作。这些转换提供了一个统一的用户界面,可以显示大量内容,而不是一次显示所有内容......

我的要求是不要使用任何容器或模式或弹出框,我想做手动管理,我有两个视图控制器VC1& VC2VC1是根视图控制器现在我想切换/中转/移动到VC2我应该怎么做?

  1. VC1应该是唯一的子类,UIViewController并且VC2应该是NSObject管理层次结构中特定视图的子类VC1?(apple doc 的 show hide 事情)。

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

或者什么是正确的方法?

4

1 回答 1

1

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

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

于 2013-07-15T15:25:02.383 回答