将 UIViewControllers 放在其他 UIViewControllers 中是不好的做法吗?
Posted
技术标签:
【中文标题】将 UIViewControllers 放在其他 UIViewControllers 中是不好的做法吗?【英文标题】:Is it bad practice to put UIViewControllers in other UIViewControllers? 【发布时间】:2015-05-13 15:45:44 【问题描述】:我知道 ios 开发中的常见做法是在屏幕上显示一个 UIViewController,其视图是从 XIB 加载的,其中包含所有 UIView 子类。
当我在为应用程序开发一个非常复杂的小部件时,我决定将小部件作为 UIViewController 的子类而不是 UIView。这是因为我认为 UIViewController 本质上是一个带有一些辅助方法的 UIView。然后我可以为它创建一个 XIB(我知道 UIView 也可以有自己的 XIB),加载它包含的视图,将 ITS 视图放置在呈现的父 VC 的视图中,然后进行布局。
到目前为止,这工作得很好,但我想知道这是否是不好的做法,我是否应该只继承一个 UIView 并给它一个普通的 NSObject 控制器。我看到了一些问题,我想知道是否有人可以解决我对这种方法的担忧?
编辑注意:小部件 VC 与它所在的 VC 视图无关,可在任何屏幕上重复使用。所以答案不是用父 VC 子类化小部件 VC。小部件位于父 VC 内部,但它不是父 VC。
编辑注 2:我没有使用 Storyboard。只有自动布局、XIB 和 ARC。
为什么我们不能在 VC 中拥有 VC?
1) 能否将 VC 简单地放入 ANOTHER VC 的 XIB 并作为子视图轻松加载?
2) 我在这里读到:When to use a UIView vs. a UIViewController on the iPhone?
上面的答案解释了 VC 如何控制屏幕的旋转和重新布置子视图,所以如果你添加另一个 VC,那么系统会自动认为那是主 VC,并会尝试旋转它,导致问题。这是真的?或者他只是在谈论你是否以某种方式进入了“展示”了 2 个 VC 的状态?我不确定他的回答是否适用于其他 VC 视图的 SUBVIEWS 的 VC 视图。
3) 一般来说,这是一种好的做法吗?这当然看起来更合理,因为它使加载子视图 VC 的视图更加容易。
谢谢!
【问题讨论】:
【参考方案1】:绝对没问题。您的问题的答案是ContainerView
。
Container View 在视图控制器的视图子图中定义了一个区域,该区域可以包含子视图控制器。在故事板中创建从容器视图到子视图控制器的嵌入转场。
【讨论】:
ContainerView 似乎不在故事板中。他们是否需要在 ContainerView 中,或者我们可以手动将子 VC 的视图设置为子视图并将子 VC 分配为父 VC 的子级,仅此而已? 是的,Apple 也这样做了。你可以阅读这篇文章,内容比较全面developer.apple.com/library/ios/featuredarticles/…【参考方案2】:你几乎猜对了。是的,为你需要的东西制作一个视图控制器是件好事。但是您不应该只是将它的视图添加到父视图中,还应该将视图控制器添加为第一个视图的子视图控制器。 您可以添加许多视图控制器作为视图控制器的子视图控制器。
您可以通过here了解更多信息。
【讨论】:
@lespommes 他不是在建议子类化。您可以将视图控制器添加到任意数量的其他 vc 中,而不考虑类,作为子 vc。同样,您也可以将任意数量的子 vc 添加到 vc 中。由于您不使用情节提要,因此您也可以以编程方式执行此操作。 完全误读了该答案。哎呀。不知道我如何阅读子类而不是孩子。谢谢!评论已删除。以上是关于将 UIViewControllers 放在其他 UIViewControllers 中是不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章
UIViewControllers 中的 UIViewController
如何添加和删除 UIViewControllers 到其他 UIViewControllers
内存泄漏,多个 UIViewControllers 的其他问题