iOS-在MVVM中动态创建控件
我需要在运行时根据从服务器检索到的配置动态创建控件。我还尝试使用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()添加每个 但是,我在一
视图
中创建N
个ui标签
,每个标签都有自己的设置(颜色、字体等),所有这些都基于服务器的配置
首先想到的是在我的ViewModel
中有一个listUILabels
属性,让ViewModel
负责创建UILabel
对象并设置它们的属性(颜色、字体等)
然后,视图
将遍历viewModel.listuibels中的每个UILabel
,通过self.View.addSubview()添加每个
但是,我在一些示例中看到,ViewModel
不应该引用UIKit
,而应该只为视图提供数据、属性和枚举(请随意评论)
为了遵守MVVM规则,我应该如何划分我的逻辑,在这种情况下,视图内部是什么,视图模型内部是什么?在我看来,视图类应该包含创建UILables的逻辑,并根据配置设置设置其UI行为
ViewModel应提供与基础数据交互的界面(属性),当数据源(模型)中的数据发生更改时,基础数据应更新视图;当数据源(模型)基于用户交互(如果有)发生更改时,基础数据应更新视图.基本上,视图模型应尽可能独立于视图。它应该是相关数据的表示,并且逻辑上属于单个页面,但不应该依赖于视图本身的实现或表示方式。理想情况下,应该可以更改视图及其布局,而不必修改ViewModel
因此,最好的做法是不要在ViewModel
中包含UILabels
列表,而是放置一个自定义类列表,该列表将存储要在视图上显示的“数据”。因为在本例中,您处理的是与UI相关的数据,所以将颜色或字体属性作为这些自定义类的属性应该没有问题
然后在视图中,您可以观察此列表,并根据提供的数据动态创建相应的控件(UILabels
)