将 UIViewControllers 放在其他 UIViewControllers 中是不好的做法吗?

Is it bad practice to put UIViewControllers in other UIViewControllers?

我知道在 iOS 开发中有一个常见的做法,即在屏幕上显示一个 UIViewController,其视图是从 XIB 加载的,其中将包含所有 UIView 子类。

当我为一个应用程序开发一个非常复杂的小部件时,我决定将该小部件子类设为 UIViewController 而不是 UIView。这是因为我认为 UIViewController 本质上是一个带有一些辅助方法的 UIView。然后我可以为它创建一个 XIB(我知道 UIViews 也可以有自己的 XIB),加载它包含的视图,将 ITS 视图放在呈现的父 VC 的视图中,然后进行布局。

到目前为止这一切都很好,但我想知道这是否是一种不好的做法,我是否应该只将 UIView 子类化并给它一个普通的 NSObject 控制器。我发现了一些问题,我想知道是否有人可以解决我对这种方法的担忧?

编辑注意:小部件 VC 与其所在的 VC 视图无关,并且可在任何屏幕上重复使用。所以答案不是将小部件 VC 与父 VC 子类化。小部件位于父 VC 内部,但它不是父 VC。

编辑注意 2:我没有使用 Storyboard。仅自动布局、XIB 和 ARC。

为什么我们不能在 VC 中包含 VC?

1) VC 是否可以简单地放入另一个 VC 的 XIB 中并作为子视图轻松加载?

2) 我在这里阅读:When to use a UIView vs. a UIViewController on the iPhone?

最上面的答案解释了 VC 如何控制屏幕的旋转和重新布局子视图,所以如果你添加另一个 VC,那么系统会自动认为这是主要的VC 并将尝试旋转它,从而导致问题。这是真的?或者他只是在谈论您是否以某种方式进入了 2 VC 是 "presented" 的状态?我不确定他的回答是否适用于 VC 视图,这些视图是其他 VC 视图的子视图。

3) 总的来说这是个好习惯吗?这当然看起来更合理,因为它使加载子视图 VC 的视图变得更加容易。

谢谢!

你几乎做对了。是的,为你所需要的做一个视图控制器是很好的。但是你不应该只是将它的视图添加到父视图,你还应该将视图控制器添加为第一个视图的子视图控制器。 您可以添加许多视图控制器作为视图控制器的子视图控制器。

您可以了解更多相关信息here

绝对没问题。您的问题的答案是 ContainerView.

Container View defines a region within a view controller's view subgraph that can include a child view controller. Create an embed segue from the container view to the child view controller in the storyboard.