首页 > 解决方案 > 使用视图模型中的 RxSwift 将动态自定义控件添加到视图中

问题描述

我最近开始使用 RxSwift。我现在确实有一些基础知识。我有一个视图控制器,我为其创建了相应的视图模型,并且定义了一些属性,并绑定到视图控制器中视图上的一些标签。此绑定工作正常。

我还有一些自定义控件,它们根据 api 响应中的某些条件动态添加到视图控制器中的滚动视图中。由于 API 调用是通过视图模型进行的,因此视图模型将具有完整的响应,并且可以直接设置与视图上的标签控件绑定的属性。这是我需要一些想法或提示的场景

根据 API 响应中的一些标志,我需要告诉视图将自定义控件 A、B、C 动态添加到滚动视图中,并将所需的数据传递给自定义控件以进行填充。并且要传递给自定义控件的数据是带有视图模型的。

是否建议为自定义控件创建视图模型?如果是,我该如何处理上述情况并使用 RxSwift 遵守 MVVM 模式。基本上由于完整的数据都在视图控制器的视图模型中,如何以最好的方式与自定义控件共享这些数据,同时符合 MVVM 模式并保持代码结构化。

标签: iosswiftrx-swift

解决方案


这取决于您的自定义控件的复杂性,如果您必须在其中处理大量业务逻辑/数据,那么该视图应该有自己的视图模型

可以这样想,在应用程序中我们有视图控制器,视图控制器只是一个视图,我们有一个视图模型。因此,当视图控制器如此复杂时,我们可以将其划分为具有自己视图模型的较小视图,如果需要,表格视图单元格可以具有其视图模型,这与您的情况类似。

所以我们可能有一个像这样的视图模型

class CustomControlViewModel: NSObject {
    var data: String!
    var flag: Int!

    init(data: String, flag: Int) {
        self.data = data
        self.flag = flag
    }
}

并且数据在 ViewControllerViewModel 内部控制

func createCustomControlViewModel() -> CustomControlViewModel {
    return CustomControlViewModel(data: "data from view model", flag: 1)
}

希望这个答案对你有帮助


推荐阅读