iOS - динамически создавать элементы управления в MVVM
У меня есть требование для создания элементов управления динамически во время выполнения на основе конфигурации, полученной с сервера. Я также пытаюсь использовать шаблон MVVM.
Для простоты, скажем, мне нужно создать N
количество UILabels
в View
каждая из которых имеет свои собственные настройки (цвет, шрифт и т. д.), все на основе конфигурации с сервера.
Первое, что приходит на ум, это иметь listUILabels
собственность в моем ViewModel
и иметь ViewModel
нести ответственность за создание UILabel
объекты и настройка их атрибутов / свойств (цвет, шрифт и т. д.).
View
затем будет перебирать каждый UILabel
в viewModel.listUILabels
добавив каждый через self.view.addSubview()
Однако я читал в некоторых примерах, что ViewModel
не должен ссылаться UIKit
вместо этого следует просто предоставить данные, свойства и перечисления для View
(не стесняйтесь комментировать это).
Чтобы придерживаться правил MVVM, как я должен разделить свою логику, что входит в View и что идет в ViewModel
в этом случае?
2 ответа
По моему мнению, ваш класс View должен содержать логику для создания UILables и настройки поведения его интерфейса на основе настроек config.
ViewModel должен предоставлять интерфейсы (свойства) для взаимодействия с базовыми данными, которые должны обновлять представление, когда изменения данных в вашем источнике данных (модели) и источнике данных (модели) должны обновляться при изменении данных на основе взаимодействия с пользователем (если есть).,
В основном ViewModel
должен быть максимально независимым от View
насколько это возможно. Это должно быть представление данных, которые связаны и логически принадлежат одной странице, но это не должно зависеть от того, как само представление реализовано или представлено. В идеале должна быть возможность изменить вид и его макет без изменения ViewModel
совсем.
Таким образом, ваш лучший способ действий не будет включать в себя список UILabels
в ViewModel
и вместо этого поместите список пользовательских классов, в которых будут храниться "данные", которые вы хотите отобразить в представлении. Поскольку в этом случае вы имеете дело с данными, связанными с пользовательским интерфейсом, не должно быть проблем с включением атрибутов цвета или шрифта в качестве свойств этих пользовательских классов.
Затем в самом представлении вы можете наблюдать этот список и динамически создавать соответствующие элементы управления (UILabels
) на основании предоставленных данных.