UITextView не переключает панель инструментов ввода на пользовательскую клавиатуру

iOS9 Xcode7 beta6: я пытаюсь переключаться между клавиатурами (настраиваемая/по умолчанию) для UITextView с помощью reloadInputViews(). Изменение UIKeyboardType и UIKeyboardAppearance вызовом reloadInputViews() работает отлично. Также следующий код хорошо работает под iOS8.

Это означает, что textView уже является первым ответчиком:

private func showCustomKeyboard() {
    textView.inputView = customKeyboardView
    textView.reloadInputViews()
}

private func showDefaultKeyboard() {
    textView.inputView = nil
    textView.reloadInputViews()
}

Такие вещи, как следующие, не дали никакого эффекта, а также выглядят излишними:

textView.inputView.resignFirstResponder()
textView.inputView.becomeFirstResponder()
textView.inputView = customKeyboardView
textView.reloadInputViews()

Я нашел пару связанных вопросов на SO, но ни один из них не имеет отношения к iOS9, и, как я уже говорил, он работает в iOS8.

Кто-нибудь сталкивался с этим багом?


person Dmytro Hutsuliak    schedule 01.09.2015    source источник


Ответы (2)


Вы пробовали изменить порядок? Потому что вы увольняете и после этого снова показываете клавиатуру. Имеет ли это смысл?:

textView?.inputView.resignFirstResponder() // dismiss keyboard
textView?.inputView.becomeFirstResponder() // show keyboard
textView?.inputView = customKeyboardView // reassign new keyboard
textView?.reloadInputViews() // reload keyboard

Пытаться:

textView?.inputView.resignFirstResponder() // dismiss keyboard
textView?.inputView = customKeyboardView // reassign new keyboard
textView?.reloadInputViews() // reload keyboard
textView?.inputView.becomeFirstResponder() // show keyboard
person Vitalii Gozhenko    schedule 01.09.2015
comment
Это не имеет смысла, потому что reloadInputViews следует вызывать, когда объект является первым ответчиком. Во всех моих примерах я подразумеваю, что textView уже является первым ответчиком. - person Dmytro Hutsuliak; 02.09.2015
comment
Скажите, зачем после этого делать resignFirstResponder и becomeFirstResponder? - person Vitalii Gozhenko; 03.09.2015
comment
Причина в принудительной перезагрузке свойств textView, и в некоторых случаях это помогает, как вы можете видеть здесь: stackoverflow.com/questions/24546339/ В вашем примере документация Apple говорит следующее о reloadInputViews: если текущий объект не первый ответивший, этот метод не имеет никакого эффекта. К сожалению. - person Dmytro Hutsuliak; 03.09.2015

Ошибка была связана с симулятором с iOS9 на плате и в итоге была исправлена ​​снятием флажка Keyboard -> Connect -> Hardware Keyboard.

person Dmytro Hutsuliak    schedule 03.09.2015
comment
Только. вызов reloadinputview не изменяет inputview программно - person famfamfam; 31.03.2021