Как автоматически отказаться от клавиатуры

#ios #swift #keyboard-events #iqkeyboardmanager

#iOS #swift #клавиатура-события #iqkeyboardmanager

Вопрос:

Я использую IQKeyboardManager . В моем пользовательском интерфейсе у меня есть textview, а под ним текстовое поле. Теперь, когда я нажимаю на текстовое представление, появляется клавиатура.

И когда я нажимаю на текстовое поле, которое находится под textview, я вызываю указатель даты. Но клавиатура, которая появилась, когда я нажал на textview, все еще остается там, поскольку я не нажимал Done кнопку на клавиатуре.

Если я нажму на свое текстовое поле, как я могу автоматически отключить клавиатуру, которая появилась при нажатии на textview, не требуя нажатия Done кнопки ..?

Я пробовал это, но это не сработало…

 func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
        print("called")
        myTextView.resignFirstResponder()
        return false
    }
    
    func textFieldDidBeginEditing(_ textField: UITextField) {
        print("called")
    }
    
  

Ответ №1:

 func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    if textField == yourTextFieldName {
        //You need to Resign both responders here.
        yourTextView.resignFirstResponder()
        yourTextFieldName.resignFirstResponder()
        //show your date picker
        return false
    } else {
        return true
    }
}
  

Разница между двумя методами.

Что-то вроде «shouldBegin» позволяет вам сказать «НЕТ» возвращаемому значению, чтобы запретить действие.

Что-то «didBegin» говорит о том, что это только начало происходить, и вам нужно предпринять все необходимые действия в этот момент времени.

Ответ №2:

убедитесь, что вы назначили textField.delegate = self

Затем, если вы хотите отключить клавиатуру в момент нажатия на текстовое поле, просто исправьте textFieldDidBeginEditing свой метод:

 func textFieldDidBeginEditing(_ textField: UITextField) {
    myTextView.resignFirstResponder()
    textField.resignFirstResponder()
}