При скрытии клавиатуры после редактирования UISearchbar скрывает себя?

Я представил экран с помощью навигационного контроллера, и на этом экране у меня есть панель поиска, которую я сделал в качестве первого ответчика в viewWillAppear(). Проблема в том, что я хочу скрыть клавиатуру при нажатии кнопки «Готово» или нажатии кнопки «Отмена» в searchBar. Но делая то же самое с 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() после вызова вышеуказанной функции.


person ashin asok    schedule 19.02.2019    source источник
comment
предоставьте более подробную информацию и код, где вы это делаете.   -  person Abu Ul Hassan    schedule 19.02.2019
comment
@AbuUlHassan добавил.   -  person ashin asok    schedule 19.02.2019


Ответы (1)


Используйте 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)
}
person AtulParmar    schedule 19.02.2019
comment
моя проблема не в сокрытии клавиатуры, а в том, что с ней скрывается uisearchbar. - person ashin asok; 19.02.2019
comment
вы проверили этот пост? stackoverflow.com/questions/29925373/ - person AtulParmar; 19.02.2019
comment
вы назначили делегата на UIsearchbar? Это может быть причиной проблемы - person AtulParmar; 19.02.2019