Iphone создать пользовательский UIobject - PullRequest
0 голосов
/ 08 июля 2011

Относительно отрицательных комментариев здесь я упрощаю свой вопрос небольшими шагами;

У меня есть приложение, основанное на представлении, которое взаимодействует с веб-службой и получает xml, анализирует xml и отображает его содержимое в соответствующем компоненте представления (например, если дата показывает вопрос с помощью DatePicker, если вопрос имеет 2 значения, покажитеэто с сегментированным элементом управления, если больше - с помощью pickerview..etc), так что это динамический вопросник со многими страницами.

1-приложение получает XML

2-Parse XML и получает последнюю версиювопросы, на которые даны ответы (может быть неограниченное количество вопросов на каждой странице), каждый вопрос нужно задавать либо с помощью текстового поля, либо с помощью средства выбора, либо сегментированного элемента управления в зависимости от типа вопроса, также может потребоваться несколько меток для объяснения и проверкиоповещения и метка вопроса.Каждый вопрос и метка должны иметь разные шрифты и цвета, определенные в xml.

3- Пользователь отвечает на все вопросы на странице и нажимает кнопку отправки.

4-Web-сервис получает, проверяет ответы иотправляет новые вопросы, которые нужно задать, в зависимости от полученных ответов.

5-APP получает новый XML (каждый XML включает в себя целое состояние, то есть все предыдущие ответы на вопросы) и анализирует, чтобы узнать последние оставшиеся без ответавопросы.

6-Пользователь снова отвечает, отправляет вопросы и ждет следующего набора вопросов, пока не будет задано никаких вопросов

7-ИЛИ пользователь может захотеть вернуться и отредактироватьнекоторые вопросы на предыдущих страницах.НО, если он редактирует какой-либо вопрос на предыдущих страницах, то страницы, на которые ответили после этой страницы, больше не действительны, потому что каждый набор вопросов, отправляемых сервером вопросов, зависит от ранее отвеченных вопросов, поэтому ему нужно удалить все последующие вопросы из XML и отправить обратнозапрос, как если бы это была последняя страница, ожидающая ответа.

Вопрос;

Я хочу создать объект вопроса, который полностью настраивается и включает возможные необходимые компоненты UI (текстовое поле ИЛИ указатель даты ИЛИ средство выбораИ некоторые надписи с их параметрами видимости и цветами) и создают этот объект в зависимости от типа вопроса и вставляют этот объект в представление UIscrollview или Table.Итак, как я могу определить класс этого объекта?это должен быть подкласс класса UIview?и куда мне положить методы его удаления?

Спасибо!

Ответы [ 2 ]

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

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

Если вы используете таблицу, возвращаемое представление будет работать как ячейка таблицы, но я не думаю, что вы должны поместить указатель даты в таблицу. Таблица - это в основном список, а не экранный контейнер. Навигационный контроллер звучит лучше для этого. Вы должны проверить подобные приложения для вдохновения.

Несколько оффтопных слов о юнит-тестировании ... (вы можете пропустить оставшуюся часть поста, если вы уже знаете юнит-тестирование) ...

Даже когда вы создаете целое приложение, OO-дизайн работает лучше всего, если вы работаете над каждой из независимых задач изолированно, поскольку он обеспечивает разделение, что является важной целью в сложном приложении.

Большинство программистов используют модульное тестирование для управления небольшим кодом, не связанным с пользовательским интерфейсом. Модульный тест - это небольшой фрагмент кода, который выполняет и тестирует результат другого фрагмента кода. Обычно он выполняется с помощью фреймворка, например GHUnit , для отдельной цели внутри вашего проекта.

Например: это мнимый метод проверки в GHUnit для проверки правильности работы вашего анализатора вопросов.

// is my parser working correctly?
- (void) testDocument {
    File *xmlFile = [File alloc] initWithFilename:@"sampleQuestion.xml"];
    Question *question = [QuestionParser parse:xmlFile];
    GHAssertTrue(question!=nil);
}

Если ваш код прошел тест, это серьезный шаг в правильном направлении. И вам не нужно было беспокоиться о том, чтобы все приложение работало для решения этой конкретной задачи.

Если вы сейчас не видите смысла модульного тестирования, забудьте об этом, это будет иметь смысл, когда вы будете готовы.

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

Вероятно, это будет подкласс UITableViewCell. Возможно, вы захотите сделать подкласс NSObject для самого вопроса и загрузить его в пользовательскую ячейку.

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