2017-02-03 8 views
1

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

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

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

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

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

- (void)viewDidLoad { 
    [super viewDidLoad]; 

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

EDIT: Я заметил, что вид ячеек таблицы серым цветом, а панель поиска имеет фокус. Поэтому я считаю, что контроллер поиска захватывает все касания и, возможно, обрабатывает их как действия «отменить». Если да, то как я могу остановить его отмену таким образом?

+0

Посмотрите на https://developer.apple.com/reference/uikit/uisearchcontroller/1618656-obscuresbackgroundduringpresenta > "Если вы используете один и тот же контроллер представления для отображения содержимого для поиска и результаты поиска, рекомендуется установить для этого свойства значение false. Значение по умолчанию этого свойства равно true. " –

+0

Да, вы правы - это решило мою проблему. Я нашел его в то же самое время, когда вы разместили его. Я чувствую себя немного глупо. Во всяком случае, я опубликовал ее как ответ сейчас, если это поможет кому-то еще позже. –

ответ

1

Понял. Мне нужно добавить:

searcher.obscuresBackgroundDuringPresentation = NO;