.xib с несколькими UITableView или несколькими списками в UIPopoverController - PullRequest
0 голосов
/ 19 октября 2011

Так что мне нужно создать фильтр, который представлен из UIPopoverController. Различные списки для фильтрации идут в класс менеджера данных (модель) и запрашивают базу данных sqlite. Проблема, с которой я сталкиваюсь, заключается в том, как сделать это для нескольких контроллеров UIPopoverController с наибольшим повторным использованием. Под этим я подразумеваю, если у меня есть два фильтра, один, скажем, для фруктов, а другой - для овощей. Каждый из них должен быть представлен в поповере.

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

Самое сложное для меня - проблемы с галочками. Поскольку мой список состоит из «Все», плюс каждая запись, например «Apple» или «Оранжевый», когда пользователь выбирает «Все», никакие другие галочки не отображаются. Если пользователь выбирает яблоко, то все отменяется, и яблоко выделяется галочкой. Если яблоко выбрано снова, то яблоко отменяется, и все выбирается заново. То, как я это делаю, в didSelectrowForIndexPath я запрашиваю класс модели, получаю свой NSDictionary значений YES / NO для каждого ключа и устанавливаю его. Это также заботится о том, когда всплывающее окно закрыто, а затем представлено снова, тогда все галочки находятся в последнем состоянии, в котором они были, так как модель уже была обновлена.

Итак, мои два вопроса

(1) если эта реализация «в порядке», то как бы у меня был отдельный список для каждого UITableView? Похоже, что поскольку UITableView управляет одним списком, мне нужно создать несколько UITableView, по одному для каждого фильтра, чтобы эти специфические вызовы диспетчера данных, как «Все», не мешали другим фильтрам

(2) есть ли лучший способ сделать это? Я открыт для предложений! Спасибо!

1 Ответ

0 голосов
/ 19 октября 2011

Возможно, вы захотите пересмотреть пользовательский интерфейс. Возможно, нет необходимости указывать «Все» в качестве опции, и может быть даже предпочтительнее не указывать ее.

Я проверил, как такие фильтры работают в других приложениях, и обнаружил, что «Все» часто не вариант. Когда таблица впервые появляется, все фрукты, скажем, показываются по умолчанию. Когда выбрана одна запись, скажем «Apple», отображаются только яблоки. Когда «Apple» не выбран, все результаты отображаются еще раз.

Это, конечно, обратное тому, что логично. Логически, если ничего не выбрано, ничего не должно быть показано. Однако я обнаружил, что когда вы используете такой фильтр без опции «Все», вы не понимаете логическую несогласованность, и она почему-то работает очень плавно, как и следовало ожидать. С другой стороны, для пользователя может показаться более обременительным, когда «Все» проверяется и не проверяется автоматически, когда пользователь выбирает совершенно другую запись.

Я реализовал фильтр именно таким образом. На мой взгляд, это более удобно для пользователя, даже если это менее логично.

Что касается реализации, я просто создал подкласс UITableViewController и установил свойство массива для записей фильтра. Затем я повторно использую свой подкласс для различных фильтров.

...