2017-01-28 51 views
0

我有一个要求,即在运行时根据从服务器检索的配置动态创建控件。我也试图利用MVVM模式。iOS - 在MVVM中动态创建控件

为了保持示例简单,可以说我必须在View中创建N号码UILabels,每个号码都有自己的设置(颜色,字体等),全部基于服务器的配置。

想到的

第一件事,就是在我ViewModel一个listUILabels性能,并具有ViewModel负责创建UILabel对象,并设置其属性/属性(颜色,字体等)。

然后View将通过每个UILabel迭代中viewModel.listUILabels加入每一个经由self.view.addSubview()

但是我在一些实例中读取,该ViewModel不应引用UIKit,而应只提供数据,属性&枚举为View (随时对此发表评论)。

为了遵守MVVM规则,我应该如何划分我的逻辑,视图内部以及在这种情况下ViewModel内部的内容?

回答

1

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

ViewModel应提供界面(属性)与基础数据进行交互,当数据根据用户交互进行更改时应更新数据源(模型)和数据源(模型)中的数据更改时应更新视图(如果有的话)。

0

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

因此,您的最佳行动方案不是在ViewModel中包含UILabels列表,而是放置一个自定义类的列表,它将存储要在视图上显示的“数据”。因为在这种情况下,您正在处理UI相关数据,所以应该没有问题,包括颜色或字体属性作为这些自定义类的属性。

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