Текст панели поиска UISearchController исчезает при потере фокуса

Я использую UISearchBar UISearchController в заголовке UITableView. Мой поиск работает нормально, когда я ввожу какой-либо текст в поле панели поиска, вызываются все соответствующие методы, и табличное представление показывает правильные результаты поиска, как и ожидалось.

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

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

Почему мой поисковый текст исчезает из поля поиска и как я могу предотвратить опустошение поля поиска, когда я нажимаю в другом месте?

Вот как я настроил панель поиска и контроллер поиска:

- (void)viewDidLoad {
    [super viewDidLoad];

    searcher = [[UISearchController alloc] initWithSearchResultsController:nil];
    searcher.searchResultsUpdater = self;
    searcher.delegate = self;
    searcher.definesPresentationContext = YES;
    resultsTable.tableHeaderView = searcher.searchBar;

РЕДАКТИРОВАТЬ: я заметил, что ячейки табличного представления затемнены, а панель поиска имеет фокус. Поэтому я думаю, что контроллер поиска фиксирует все прикосновения и, возможно, обрабатывает их как действия «отмены». Если да, то как остановить его отмену таким образом?


person Son of a Beach    schedule 03.02.2017    source источник
comment
Взгляните на developer.apple.com/reference/uikit/uisearchcontroller/ ›Если вы используете один и тот же контроллер представления для отображения доступного для поиска содержимого и результатов поиска, рекомендуется установить для этого свойства значение false. Значение по умолчанию этого свойства — true.   -  person Mike Sand    schedule 04.02.2017
comment
Да, вы правы - это решило мою проблему. Я нашел его сам примерно в то же время, когда вы написали. Я чувствую себя немного глупо. Во всяком случае, я опубликовал это как ответ сейчас, на случай, если это поможет кому-то еще позже.   -  person Son of a Beach    schedule 04.02.2017


Ответы (1)


Догадаться. Мне нужно было добавить:

searcher.obscuresBackgroundDuringPresentation = NO;
person Son of a Beach    schedule 03.02.2017