目前我以编程方式设置了大部分用户界面。有两种方法可以安排属于屏幕的视图(另外还有使用笔尖):
我知道两者都有效,但在哪种情况下你会选择哪种解决方案?
此外,对于第一个变体,可以选择在viewDidLoad中进行设置并将视图添加到self.view,或者构建容器视图并在loadView中添加所有视图。这里的任何好建议也将受到赞赏。
当您将完整视图设置为控制器视图时,第二个变体接近使用nib。
不打算在这里开始宗教战争,而是寻找两种方法的论据。
答案 0 :(得分:4)
我可以考虑一些标准,我会用它们来选择一种选择。
如果这组视图是或可能是许多屏幕上显示的可重用组件,我倾向于创建一个UIView子类。
如果视图控制器需要直接访问多个视图,我会在控制器中构造它们。我尝试使自定义UIView类成为不透明容器,因此它们的控制器只需要与父视图交互,而不是通过其子视图进行挖掘。
如果视图集不能呈现处理单个概念的API,例如,如果视图层次结构仅用于正确设置视图的z-index并且这些视图处理显示不相关的数据,那么我将再次创建他们在控制器中。 UIView子类应该负责只显示一个连贯的数据集,或者以一致的方式管理一组子视图。
如果需要相对于层次结构之外的视图定位视图,我将再次支持在控制器中定义它们。
答案 1 :(得分:1)
在这种情况下考虑MVC(模态,视图,控制器)。
一个不错的选择是创建一个单独的UIView类并将UIViewController的视图设置为此(或将其作为子视图添加到控制器的视图中),然后使用委托方法进行从UIView子类到控制器的任何用户交互。 / p>
但是,如果你只打算在控制器的视图中有一个视图(所以没有交换视图,翻转等),你基本上可以只使用控制器的视图来显示所有UI。