UITextView в пользовательском inputaccessoryView не уходит с первого статуса ответчика
У меня есть приложение чата, которое реализует плавающее поле ввода текста (аналогично приложению "Сообщения iOS") в качестве inputAccessoryView
моего ChatViewController
(см. Документацию Apple).
class ChatViewController: UIViewController {
override var inputAccessoryView: UIView? {
return chatInputView
}
override var canBecomeFirstResponder: Bool {
return true
}
...
Мой ChatViewController
имеет дочерний контроллер представления ChatTableViewController
, в котором есть ячейки, содержащие UITextField
, текстовое содержимое которого можно редактировать. Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь UITextField
на ячейку UITextField
, inputAccessoryView
UITextView
отказывается оставить статус первого респондента, что препятствует редактированию содержимого в UITableViewCell
. Следующее предупреждение регистрируется в консоли:
First responder warning: '<UITextView: 0x7fc041041c00;
frame = ...' rejected resignFirstResponder when being removed from hierarchy
Я попытался вызвать resignFirstResponder
и endEditing
для UIInputView
и UITextView
напрямую, но безуспешно. Я не хочу, чтобы ChatViewController
от статуса первого респондента, так как это привело бы к исчезновению inputAccessoryView
.
Редактировать: я также получаю предупреждение при удалении клавиатуры в интерактивном режиме (вместо нажатия на UITableViewCell
UITextField
.
Ответы
Ответ 1
Не могли бы вы проверить следующее:
Если UITextView
удаляется из супер-представления:
- Удаляется ли
UITextView
из иерархии представления?
- Если бы вы могли
resignFirstResponder
удалить его из супер-представления.
Если используется подкласс UITextView
:
- Используете ли вы подкласс
UITextView
, если вы внедрили canResignFirstResponder
для возврата false
.
- Не могли бы вы попробовать вернуться
true
.
Ответ 2
Мое решение:
- переопределить canBecomeFirstResponder для вашего inputAccessoryView и этого UITextField для inputAccessoryView
- когда пользователь нажимает скрыть клавиатуру или вернуться, установите для canBecomeFirstResponder значение false
- удалить inputAccessoryView из его суперпредставления
по-прежнему есть предупреждение при нажатии скрыть клавиатуру, но у меня хорошо работает.