#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()
}