Я думаю, что нашел лучшую реализацию для этой проблемы. Все предыдущие ответы правильно показывают тусклое представление, идентичное тому, как выглядит UITableView перед поиском, но в каждом решении отсутствует функция касания области, чтобы отменить поиск.
По этой причине я думаю, что этот код работает лучше.
Прежде всего, создайте BOOL, например searchButtonTapped, чтобы указать, была ли нажата кнопка поиска. По умолчанию это НЕТ.
Тогда:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
if (!searchButtonTapped) {
// To prevent results from being shown and to show an identical look to how the tableview looks before a search
[controller.searchResultsTableView setBackgroundColor:[UIColor clearColor]];
[controller.searchResultsTableView setRowHeight:160];
self.searchDisplayController.searchResultsTableView.scrollEnabled = NO;
} else {
// Restore original settings
[controller.searchResultsTableView setBackgroundColor:[UIColor whiteColor]];
[controller.searchResultsTableView setRowHeight:44];
self.searchDisplayController.searchResultsTableView.scrollEnabled = YES;
}
return YES;
}
Теперь это должно быть ясно, основываясь на других ответах. Не забудьте также восстановить исходные настройки, когда пользователь нажимает кнопку «Поиск».
Кроме того, в методе cellForIndexPath добавьте:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.contentView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.8];
Чтобы создать ту же тусклую картинку, которая отображается перед вводом текста. Убедитесь, что вы применили эти свойства к правой ячейке, то есть проверьте, какой UITableView активен и что пользователь не нажал кнопку Поиск.
Тогда, что самое важное, в didSelectRowAtIndexPath:
if (tableView == self.searchDisplayController.searchResultsTableView) {
if (searchButtonTapped) {
// Code for when the user select a row after actually having performed a search
{
else
[self.searchDisplayController setActive:NO animated:YES];
Теперь пользователь может коснуться затемненной области, что не приведет к видимому выделению UITableViewCell, а вместо этого отменит поиск.