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