На скрытии клавиатуры после редактирования, UISearchbar скрывает себя?
Я представил экран с помощью контроллера навигации, и на этом экране у меня есть строка поиска, которую я сделал в качестве первого респондента в viewWillAppear() . Проблема в том, что я хочу скрыть клавиатуру, когда нажата кнопка "Готово" или нажата кнопка "Отмена" в панели поиска. Но, делая то же самое с resignFirstResponder() и searchBar.endEditing(true), он также скрывает UISearchBar. Я хочу показать UISearchBar, когда состояние также не в редактировании.
По сути, я сделал свой UISearchBar своим первым респондентом следующим образом:
override func viewWillAppear(_ animated: Bool) {
searchBar.becomeFirstResponder()
}
затем, когда пользователь нажимает кнопку поиска, я сделал:
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
// Remove focus from the search bar.
}
То же самое в случае с кнопкой отмены. Но в моем случае вместо простого отклонения клавиатуры это также скрывает UISearchbar() после вызова вышеуказанной функции.
2 ответа
В этом случае с помощью NotificationCenter
это лучший способ. Вы не делитесь кодом, поэтому я приведу пример в моем старом проекте
Объявите это в вашей функции ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
и создать функцию в действии кнопки
@objc func keyboardHide() {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
}, completion: nil)
}
Выше код должен скрыть клавиатуру более 0,5 секунды.
Используйте NotificationCenter addObserver для получения события показа клавиатуры и скрытия клавиатуры.
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShowNotification(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHideNotification(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
// MARK: - Keyboard Hide/Show Functions
@objc func keyboardWillShowNotification(notification: Notification) {
print("Keyboaed Show")
}
@objc func keyboardWillHideNotification(notification: Notification) {
print("Keyboaed Hide")
}
Примечание:- Не забудьте убрать наблюдателя, когда UIviewContoller
исчезнет.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}