Я использую UISearchBar для фильтрации данных для табличного представления и хочу, чтобы клавиатура была отключена, когда на панели поиска нет текста запроса (текст удаляется нажатием кнопки удаления клавиатуры или нажатием кнопки очистки панели поиска). Основываясь на том, что я узнал из других сообщений о stackoverflow, я понимаю, что нажатие кнопки очистки панели поиска (серая круглая кнопка со значком x) покажет клавиатуру, даже если вы вызываете searchBar.resignFirstResponder () в методе textDidChange UISearchBarDelegate. Поэтому, если вы нажмете кнопку очистки панели поиска, клавиатура будет скрыта, а затем снова вернется назад sh, а при удалении текста вручную клавиатура будет скрыта.
Единственным решением является вызов метода resignFirstResponder () внутри блока кода DispatchQueue.main.asyn c.
Может кто-нибудь объяснить, почему необходимо вызывать метод resignFirstResponder () асинхронно в основной очереди распустить клавиатуру? почему вызов напрямую не работает?
Проверьте код ниже:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text?.count == 0 {
loadItems()
//the following code works!
DispatchQueue.main.async {
searchBar.resignFirstResponder()
}
// //this line of code only works when you tap the deleting keyboard button to remove the query text
// //does not work if you click the searchbar clear button
// searchBar.resignFirstResponder()
}
}