На скрытии клавиатуры после редактирования, UISearchbar скрывает себя? - PullRequest
0 голосов
/ 19 февраля 2019

Я представил экран с помощью контроллера навигации, и на этом экране у меня есть строка поиска, которую я сделал в качестве первого респондента в 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 ]

0 голосов
/ 19 февраля 2019

Используйте 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)
}
0 голосов
/ 19 февраля 2019

В этом случае лучше использовать NotificationCenter.У вас нет общего кода, поэтому я приведу пример в моем старом проекте

Объявите это в вашем ViewDidLoad func

override func viewDidLoad() {
    super.viewDidLoad()

     NotificationCenter.default.addObserver(self, selector: #selector(keyboardHide), name: UIResponder.keyboardWillHideNotification, object: nil)

}

и создайте функцию в кнопке action

@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 секунды.

...