Создание интерфейса, управляемого данными - PullRequest
2 голосов
/ 24 августа 2011

Я искал в SO всю эту тему для iPhone, и все указывает на освещение WWDC 2010, так что да, я в курсе. Но может ли кто-нибудь указать мне более подробный ресурс, из которого я могу узнать, как построить надежную систему для представления различных пользовательских интерфейсов в приложении в зависимости от данных, которые я представляю? Я извлекаю данные в формате JSON, и мой пользовательский интерфейс должен меняться в зависимости от того, что я получаю из анализатора JSON.

Какие-нибудь книги или онлайн-ресурсы, в которых подробно рассматривается эта тема?

Спасибо!

1 Ответ

2 голосов
/ 24 августа 2011

Недавно у меня была такая же проблема в одном из моих приложений (стиль навигации), и способ ее решения довольно прост.

В моем ответе JSON был флаг user_type, и в зависимости от этого флага я вставлял другой контроллер представления.

Например, учитывая, что мой ответ JSON хранится в NSMutableDictionary под названием «ответ»

if ([response objectForKey:@"account_type"] == 1) {
  /*
    initialize user_type 1 viewController
  */
    [self.navigationController pushViewController:userType1ViewController animated:YES];
else if ([response objectForKey:@"account_type"] == 2) {
  /*
    initialize user_type 2 viewController
  */
    [self.navigationController pushViewController:userType2ViewController animated:YES];
}

Вы можете иметь столько разных user_types, сколько хотите.

Редактирование после уточнения в комментариях

Вы, вероятно, будете рисовать эти виды вручную.

Я бы выделил подкласс UIView для каждого из перечисленных вами типов вопросов (включая свойства для общих элементов, таких как заголовок вопроса, варианты выбора и т. Д.). Предполагая, что вопросы с одним и тем же типом вопросов будут иметь одинаковое расположение.

Затем вы можете циклически просмотреть свой ответ JSON (как только он будет в массиве или словаре) и выложить его.

Если это вопрос с несколькими вариантами ответов, создайте новое представление множественного ответа на вопрос, добавьте его свойства, а затем добавьте представление в основное представление канала. Затем, для вашего следующего просмотра, вам нужно будет установить кадр следующим образом:

nextQuestion.frame = CGRectMake(0, 0 + firstQuestion.frame.size.height, height, width);

Это гарантирует, что ваш второй вопрос будет нарисован прямо под первым вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...