Подтвердить что ты не робот

Как программно отклонить UISearchBar?

У меня есть стандартное представление таблицы, с UISearchController, реализованным через NIB. Я хочу подражать тому, что происходит, когда пользователь нажимает "Отменить" в строке поиска - обычное поведение заключается в том, что панель поиска уходит, и таблица возвращается в исходное состояние. В принципе, я хочу, чтобы это произошло, когда пользователь выбирает элемент, который появляется в результатах поиска.

Я не могу найти нигде процесс того, что происходит, когда пользователь нажимает "Отменить".

4b9b3361

Ответ 1

Это старый вопрос, но я просто бил головой об этом в течение часа или двух и, наконец, понял это, поэтому я думал, что поделюсь потомками. Сначала я пробовал делать что-то вроде отставки первого ответчика/удаления текста поиска и т.д. Вручную, но в этом представлении я хотел, чтобы пользователь мог использовать панель поиска несколько раз, а выполнение вещей вручную означало, что панель поиска пришлось переустанавливать каждый раз, когда пользователь начал редактировать его снова - казалось неправильным подходом. Вот что я сделал:

Я уже добавил панель поиска с дополнительным контроллером отображения поиска в Interface Builder. В моей реализации я настроил IBOutlet UISearchDisplayController, а затем связал его с контроллером отображения поиска, используя IB. Наконец, в месте, где я хочу отклонить строку поиска, мне просто нужно позвонить:

[mySearchController setActive:NO];

Работает как шарм!

Ответ 2

Обычно метод searchBarCancelButtonClicked: выглядит примерно так:

yourSearchBar.text = @"";
[yourTableView reloadData];
[yourSearchBar resignFirstResponder];

Ответ 3

Вот как я решил эту проблему после нескольких часов экспериментов =)

for(UIView *subView in self.searchDisplayController.searchBar.subviews){
    if([subView isKindOfClass:UIButton.class])
    {
        UIButton *cancelButton = (UIButton*)subView;
        [cancelButton sendActionsForControlEvents: UIControlEventTouchUpInside];
        break;
    } 
}

Ответ 4

Set active также очистил мой текст UISearchBar, и поэтому мой массив элементов данных будет очищен, поэтому это сработало для меня:

self.searchController.dismissViewControllerAnimated(true, completion: nil)

Это очистило UIDimmingView и оставило мой текст поиска в одиночку - отлично в моем случае.