2017-01-28 67 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)。