【问题标题】:iOS - Dynamically Create Controls in MVVMiOS - 在 MVVM 中动态创建控件
【发布时间】:2017-01-28 07:21:27
【问题描述】:

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

为了简单起见,假设我必须在 View 中创建 N 数量的 UILabels,每个都有自己的设置(颜色、字体等),所有这些都基于服务器的配置。

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

然后View 将遍历viewModel.listUILabels 中的每个UILabel,通过self.view.addSubview() 添加每个@

但是我在一些示例中读到,ViewModel 不应引用 UIKit,而应仅提供 View 的数据、属性和枚举(请随时对此发表评论)。

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

【问题讨论】:

    标签: ios swift mvvm dynamic-controls


    【解决方案1】:

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

    ViewModel 应该提供与底层数据交互的接口(属性),当数据源(模型)中的数据发生变化时应该更新视图,并且当数据基于用户交互发生变化时,数据源(模型)应该更新(如果有的话)。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多