Реализация панели поиска
Одним из решений этой проблемы является добавление индекса в правой части таблицы. Теперь, когда мы вновь установили стиль нашего табличного представления в Plain, это относительно легко сделать. Добавьте следующий метод в конец файла.
Да, именно так. В этом методе у делегата запрашивается массив значений для отображения в индексе. В вашем табличном представлении должно быть несколько разделов, чтобы можно было использовать индекс, и записи в упомянутом массиве должны соответствовать этим разделам. Возвращаемый массив должен иметь столько же записей, сколько у вас есть разделов, а их значения должны соответствовать разделам. Другими словами, первый элемент этого массива перенесет пользователя в первый раздел, который имеет номер 0.
Скомпилируйте и запустите приложение снова, и вы увидите красивый индексный указатель.
Индекс полезен, но, несмотря на это, у нас все еще слишком много имен. Если, например мы хотим узнать, имеется пи в списке имя Arabella, то должны будем выполнить некоторую прокрутку даже при применении индекса. Было бы неплохо, если бы мы могли дать пользователю возможность уменьшить список, введя поисковый запрос. Это требует небольшой дополнительной работы, но результат того стоит. Мы собираемся реализовать стандартную панель поиска iOS, показанную на Пересмотр проекта.
Прежде чем приступить к добавлению панели поиска, мы должны немного поразмыслить. В настоящее время у нас есть словарь, который хранит ряд массивов, по одному для каждой буквы алфавита. Словарь является неизменяемым, а это значит, что мы не можем добавлять в него значения или удалять их, и то же относится к хранящимся в нем массивам. Нам также необходимо сохранить возможность вернуться к исходному набору данных, когда пользователь отменяет поиск или стирает строку поиска.
Решение состоит в создании двух словарей: неизменного словаря для хранения полного набора данных и изменяемой копии, из которой можно удалять строки. Делегат и источники данных будут читать изменяемый словарь, а при изменении строки поиска или его отмены можно будет обновить изменяемый словарь из неизменного. Это уже похоже на план. Давайте осуществим его. При использовании категорий мы можем добавить к NSDictionary метод для создания глубоких копий, который возвращает NSMutableDictionary с теми же данными, но не содержит тех же реальных объектов, что и исходный словарь.
- Дата: 2-12-2014, 14:22