iOS - 在MVVM中动态创建控件
我有一个要求,即在运行时根据从服务器检索的配置动态创建控件。我也试图利用MVVM模式。iOS - 在MVVM中动态创建控件
为了保持示例简单,可以说我必须在View
中创建N
号码UILabels
,每个号码都有自己的设置(颜色,字体等),全部基于服务器的配置。
第一件事,就是在我ViewModel
一个listUILabels
性能,并具有ViewModel
负责创建UILabel
对象,并设置其属性/属性(颜色,字体等)。
然后View
将通过每个UILabel
迭代中viewModel.listUILabels
加入每一个经由self.view.addSubview()
但是我在一些实例中读取,该ViewModel
不应引用UIKit
,而应只提供数据,属性&枚举为View
(随时对此发表评论)。
为了遵守MVVM规则,我应该如何划分我的逻辑,视图内部以及在这种情况下ViewModel
内部的内容?
在我看来,你的View类应该包含创建UILables的逻辑,并根据配置设置设置其UI行为。
ViewModel应提供界面(属性)与基础数据进行交互,当数据根据用户交互进行更改时应更新数据源(模型)和数据源(模型)中的数据更改时应更新视图(如果有的话)。
基本上ViewModel
应尽可能独立于View
。它应该是一个数据的表示,它们在逻辑上属于同一个页面,但不应该依赖于视图本身的实现或表示方式。理想情况下,应该可以更改视图及其布局,而不必修改ViewModel
。
因此,您的最佳行动方案不是在ViewModel
中包含UILabels
列表,而是放置一个自定义类的列表,它将存储要在视图上显示的“数据”。因为在这种情况下,您正在处理UI相关数据,所以应该没有问题,包括颜色或字体属性作为这些自定义类的属性。
然后在视图本身中,您可以观察此列表并根据提供的数据动态创建适当的控件(UILabels
)。