Недавно у меня была такая же проблема в одном из моих приложений (стиль навигации), и способ ее решения довольно прост.
В моем ответе 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);
Это гарантирует, что ваш второй вопрос будет нарисован прямо под первым вопросом.