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) на основании предоставленных данных.

Другие вопросы по тегам