我知道iOS开发中常见的做法是在屏幕上显示一个UIViewController,其视图从XIB加载,其中包含所有UIView子类。
当我为一个应用程序开发一个相当复杂的小部件时,我决定将小部件子类化为UIViewController而不是UIView。这是因为我认为UIViewController本质上是一个UIView,它周围有一些辅助方法。然后我可以为它创建一个XIB(我知道UIViews也可以拥有自己的XIB),加载它包含的视图,将ITS视图放在显示的父VC视图中,并将其布局。
到目前为止这个工作正常,但我想知道这是不好的做法,如果我应该只是将UIView子类化并给它一个普通的NSObject控制器。我看到了一些问题,我想知道是否有人能解决我对这种方法的担忧?
编辑注意:小部件VC与它所在的VC视图无关,并且可以在任何屏幕上重复使用。所以答案不是使用父VC将小部件VC子类化。窗口小部件位于父VC中,但它不是父VC。
编辑注2:我不使用Storyboard。只有Autolayout,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被“呈现”的状态?我不确定他的答案是否适用于其他VC视图的SUBVIEWS的VC视图。
3)一般来说这是一个好习惯吗?这看起来更合理,因为它更容易加载子视图VC的视图。
谢谢!
答案 0 :(得分:1)
你几乎做对了。是的,最好为你需要的东西制作一个视图控制器。但是您不应该只将视图添加到父视图中,还应该将视图控制器添加为第一个视图的子视图控制器。 您可以添加许多视图控制器作为视图控制器的子视图控制器。
您可以详细了解here。
答案 1 :(得分:1)
绝对没问题。您的问题的答案是ContainerView
。
容器视图定义视图控制器的视图子图中可包含子视图控制器的区域。在容器视图中创建一个嵌入segue到故事板中的子视图控制器。