На скрытии клавиатуры после редактирования, 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)
}
Другие вопросы по тегам