iOS-在MVVM中动态创建控件

iOS-在MVVM中动态创建控件,ios,swift,mvvm,dynamic-controls,Ios,Swift,Mvvm,Dynamic Controls,我需要在运行时根据从服务器检索到的配置动态创建控件。我还尝试使用MVVM模式 为了简化示例,假设我必须在视图中创建N个ui标签,每个标签都有自己的设置(颜色、字体等),所有这些都基于服务器的配置 首先想到的是在我的ViewModel中有一个listUILabels属性,让ViewModel负责创建UILabel对象并设置它们的属性(颜色、字体等) 然后,视图将遍历viewModel.listuibels中的每个UILabel,通过self.View.addSubview()添加每个 但是,我在一

我需要在运行时根据从服务器检索到的配置动态创建控件。我还尝试使用MVVM模式

为了简化示例,假设我必须在
视图
中创建
N
ui标签
,每个标签都有自己的设置(颜色、字体等),所有这些都基于服务器的配置

首先想到的是在我的
ViewModel
中有一个
listUILabels
属性,让
ViewModel
负责创建
UILabel
对象并设置它们的属性(颜色、字体等)

然后,
视图
将遍历
viewModel.listuibels中的每个
UILabel
,通过
self.View.addSubview()添加每个

但是,我在一些示例中看到,
ViewModel
不应该引用
UIKit
,而应该只为
视图提供数据、属性和枚举(请随意评论)


为了遵守MVVM规则,我应该如何划分我的逻辑,在这种情况下,视图内部是什么,视图模型内部是什么?

在我看来,视图类应该包含创建UILables的逻辑,并根据配置设置设置其UI行为


ViewModel应提供与基础数据交互的界面(属性),当数据源(模型)中的数据发生更改时,基础数据应更新视图;当数据源(模型)基于用户交互(如果有)发生更改时,基础数据应更新视图.

基本上,
视图模型应尽可能独立于
视图。它应该是相关数据的表示,并且逻辑上属于单个页面,但不应该依赖于视图本身的实现或表示方式。理想情况下,应该可以更改视图及其布局,而不必修改
ViewModel

因此,最好的做法是不要在
ViewModel
中包含
UILabels
列表,而是放置一个自定义类列表,该列表将存储要在视图上显示的“数据”。因为在本例中,您处理的是与UI相关的数据,所以将颜色或字体属性作为这些自定义类的属性应该没有问题

然后在视图中,您可以观察此列表,并根据提供的数据动态创建相应的控件(
UILabels