我需要根据从服务器检索的配置在运行时动态创建控件。我也试图利用MVVM模式。
为了保持示例简单,我可以说我必须在N
中创建UILabels
个View
,每个都有自己的设置(颜色,字体等),所有这些都基于从服务器配置。
我想到的第一件事就是在listUILabels
中拥有ViewModel
属性,让ViewModel
负责创建UILabel
个对象并设置它们属性/属性(颜色,字体等)。
View
将遍历UILabel
中的每个viewModel.listUILabels
,通过self.view.addSubview()
添加每个ViewModel
但是,我在一些示例中读到,UIKit
不应该引用View
,而应该只提供数据,属性和ViewModel
的枚举(随意评论)。
为了遵守MVVM规则,我应该如何对逻辑进行分区,View中的内容以及Random r = new Random();
int red=r.nextInt(255 - 0 + 1)+0;
int green=r.nextInt(255 - 0 + 1)+0;
int blue=r.nextInt(255 - 0 + 1)+0;
GradientDrawable draw = new GradientDrawable();
draw.setShape(GradientDrawable.OVAL);
draw.setColor(Color.rgb(red,green,blue));
mTextView.setBackground(draw);
内部的内容是什么?
答案 0 :(得分:1)
在我看来,你的View类应包含创建UILables的逻辑,并根据配置设置设置其UI行为。
ViewModel应提供与底层数据交互的接口(属性),当数据根据用户交互进行更改时,应更新数据源(模型)和数据源(模型)中的数据更改时应更新View如果有的话。
答案 1 :(得分:0)
基本上ViewModel
应尽可能独立于View
。它应该是相关且逻辑上属于单个页面的数据的表示,但它不应取决于视图本身的实现或表示方式。理想情况下,应该可以更改视图及其布局,而无需修改ViewModel
。
因此,您最好的做法是不在UILabels
中添加ViewModel
列表,而是列出自定义类,这些类将存储"数据"您要在视图上显示的内容。因为在这种情况下,您正在处理与UI相关的数据,所以应该没有问题,包括颜色或字体属性作为这些自定义类的属性。
然后在视图中,您可以观察此列表并根据提供的数据动态创建适当的控件(UILabels
)。