iOS - 在MVVM中动态创建控件

时间:2017-01-28 07:21:27

标签: ios swift mvvm dynamic-controls

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

为了保持示例简单,我可以说我必须在N中创建UILabelsView,每个都有自己的设置(颜色,字体等),所有这些都基于从服务器配置。

我想到的第一件事就是在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); 内部的内容是什么?

2 个答案:

答案 0 :(得分:1)

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

ViewModel应提供与底层数据交互的接口(属性),当数据根据用户交互进行更改时,应更新数据源(模型)和数据源(模型)中的数据更改时应更新View如果有的话。

答案 1 :(得分:0)

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

因此,您最好的做法是不在UILabels中添加ViewModel列表,而是列出自定义类,这些类将存储"数据"您要在视图上显示的内容。因为在这种情况下,您正在处理与UI相关的数据,所以应该没有问题,包括颜色或字体属性作为这些自定义类的属性。

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