Супер / подклассы и представления в приложении для iPhone - PullRequest
2 голосов
/ 18 июля 2011

У меня есть приложение для iPhone, которое представляет анкету.Анкета состоит из нескольких вопросов.

Я создал класс QuestionnaireViewController, который загружает несколько QuestionViewController объектов в зависимости от количества вопросов в этой анкете (это извлекается из внешнего источника данных).

Это прекрасно работает.

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

Все типы вопросов имеют подмножество свойств:

Вопросы имеют заголовок, идентификатор, идентификатор раздела и номер вопроса.

Виды вопросов будут отличаться в зависимости от способа ввода данных.Некоторые требуют ввода данных с помощью ползунка, в то время как другие требуют ввода текста.

Это сразу вызывает структуру суперкласса / подкласса:

Question
  SliderQuestions
  TextInputQuestions
  etc

Мои вопросы:

1) Как я могу загрузить определенный подкласс представления на основе некоторого значения данных?

например

if ([questionType isEqualToString:@"slider"]) {
  //load slider view
} else if ([questionType isEqualToString:@"textInput"]) {
  //load text input view
}

Нужно ли создавать View AND ViewController для каждого класса?Как я могу смоделировать эту структуру подкласса суперкласса?

Моя путаница заключается в создании представлений и контроллеров представлений.Очевидно, что мне нужно новое представление для обработки конкретных компонентов вопроса, таких как добавление ползунка к одному и ввод текста в другое, но как мне показать общие данные (свойства суперкласса), не дублируя каждый вид?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Я рекомендую вам использовать tag s для определения UIView s, если у вас их много. В противном случае вы можете сравнить строки с

[questionType isEqualToString:@"string"];

Хотя последний подход - более подробное описание, использование tag s позволит вам установить switch, что сделает код немного более логичным и более компактным (IMHO).

0 голосов
/ 19 июля 2011

Ответ на ваш вопрос: да, у вас могут быть разные представления для разных типов вопросов. Если данные из ответов похожи, я бы использовал один контроллер представления с переключателями на а) загрузить альтернативные представления и b) обработать различные типы ответов (при необходимости).

Таким образом, отдельный контроллер представления, отдельные представления будет проще всего, но вы также можете использовать один вид и показывать / скрывать различные элементы управления. Programatically.

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