Как я могу заставить UITableView перезагружать данные, сохраняя UISearchBar активным? - PullRequest
4 голосов
/ 04 марта 2011

У меня есть UITableView, который имеет 20 разделов. Вверху у меня есть UISearchBar, и я хочу отфильтровать разделы в реальном времени по типам пользователей.

К сожалению, если UISearchBar активен и если я возвращаю NO из searchBarShouldEndEditing: тогда мой вызов [tableView reloadData] игнорируется. Если я возвращаю YES из searchBarShouldEndEditing: тогда вызов reloadData работает нормально, но я теряю firstResponder после каждого введенного символа.

Как я могу заставить UITableView выполнять живые обновления и фильтрацию без необходимости повторного вызова resignFirstResponder на UISearchBar между каждым введенным символом?

Ответы [ 3 ]

5 голосов
/ 24 января 2013

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

Вы размещаете панель поиска в определенном разделе таблицы (скажем, индекс 0).Вы помещаете данные таблицы в другой раздел (скажем, индекс 1).

Когда текст строки поиска изменяется, вы можете обновить модель и затем просто позвонить:

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:1];
[self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];

ThisКстати, ваша клавиатура будет по-прежнему активна, ваша панель поиска по-прежнему будет первым респондентом, и вы получите выгоду от хорошей встроенной анимации таблицы!

3 голосов
/ 04 марта 2011

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

0 голосов
/ 27 июня 2013

У меня была похожая проблема.Оказалось, что это связано с анимацией, которую я использовал, когда таблица перезагружала данные.Когда я удалил reloadSections:withRowAnimation и просто вызвал:

[self.tableView reloadData];

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

Надеюсь, это поможет ...

...