Как программно форсировать поиск в UISearchBar?
Как заставить UISearchBar автоматически начать новый поиск (например, нажав кнопку "Поиск")? Есть ли простой способ добиться этого?
9 ответов
Я обнаружил, что мне нужно было активировать UISearchViewController перед тем, как программно изменить значение поля поиска, чтобы UISearchViewController автоматически выполнял поиск:
// Need to set the searchDisplayController to active to
// make the changes in search text trigger a search.
self.searchDisplayController.active = YES;
self.searchDisplayController.searchBar.text = @"New search string";
Просто сделайте поле ввода поиска первым ответчиком:
[self.searchInputField becomeFirstResponder];
Вы можете заставить ваш searchBar,
Цель C:
[self searchBar:yourSearchBarName textDidChange: yourSearchingString];
Swift 3.0:
self.searchBar(self.yourSearchBarName, textDidChange: yourSearchingString)
Это вызовет ваш SearchBar.
Убедившись, что нужный текст находится внутри панели поиска, вы можете позвонить self.searchBarSearchButtonClicked(searchBar)
(передавая в строке поиска), если вы уже реализовали этот метод UISearchBarDelegate searchBarSearchButtonClicked(_ searchBar: UISearchBar)
let searchBar: UISearchBar = /* The Searchbar */
searchBar.delegate?.searchBar?(searchBar, textDidChange: "")
searchBar.text = ""
Да, вам нужно всего лишь сделать неявный вызов searchBarSearchButtonClicked:
на ваше UISearchbarDelegate
, Посмотрите официальный документ для получения дополнительной информации об этом делегате.
Свифт 5
Если у вас просто есть UISearchBar (не UISearchViewController):
let searchBar: UISearchBar
searchBar.text = "foo" // Reset the search text
searchBar.becomeFirstResponder() // Select the field and bring up the keyboard
Кажется глупым, но работает, так что это не глупо;)
NSString * forceReload = self.searchDisplayController.searchBar.text;
self.searchDisplayController.searchBar.text = forceReload;
Это сработало - Swift 4
searchBar.text="Amber"
self.searchBar(self.searchBar, textDidChange: "Amber")