2017-01-28 7 views
0

У меня есть требование для динамического создания элементов управления во время выполнения на основе конфигурации, полученной с сервера. Я также пытаюсь использовать шаблон MVVM.iOS - Динамическое создание элементов управления в MVVM

Чтобы упростить пример, предположим, что я должен создать N количество UILabels в View, каждый со своими настройками (цвет, шрифт и т.д.) все на основе конфигурации с сервера.

Первое, что приходит на ум, это иметь listUILabels свойство в моем ViewModel, и имеют ViewModel нести ответственность за создание UILabel объектов и настройки их атрибутов/свойств (цвет, шрифт и т.д.).

View затем итерацию по каждому UILabel в viewModel.listUILabels добавляя каждый из них с помощью self.view.addSubview()

Однако я прочитал в некоторых примерах, что ViewModel не должны ссылаться на UIKit, вместо того, чтобы просто должны предоставить данные, свойства & перечислений для View (не стесняйтесь прокомментировать это).

Чтобы придерживаться правил MVVM, как я должен разделять мою логику, что происходит внутри представления и что происходит внутри ViewModel в этом случае?

ответ

1

По моему мнению, класс View должен содержать логику создания UILables и настройку его пользовательского интерфейса на основе настроек конфигурации.

ViewModel должен предоставлять интерфейсы (свойства) для взаимодействия с базовыми данными, которые должны обновлять представление, когда изменения данных в источнике данных (модели) и источнике данных (модели) должны обновляться, когда данные изменяются в зависимости от взаимодействия пользователя (если есть).

0

В принципе, ViewModel должен быть как можно более независимым на View. Это должно быть представление данных, которые связаны и логически принадлежат на одной странице, но не должны зависеть от того, как сам вид представления реализован или представлен. В идеале должно быть возможно изменить вид и его макет, не изменяя вообще ViewModel.

Таким образом, ваш лучший курс действий не будет включать список UILabels в ViewModel и вместо этого разместит список пользовательских классов, которые будут хранить «данные», которые вы хотите отобразить на экране. Поскольку в этом случае вы имеете дело с данными, связанными с пользовательским интерфейсом, не должно быть никаких проблем, включая атрибуты цвета или шрифта в качестве свойств этих пользовательских классов.

Затем в самом представлении вы можете наблюдать этот список и динамически создавать соответствующие элементы управления (UILabels) на основе предоставленных данных.

 Смежные вопросы

  • Нет связанных вопросов^_^