В iOS 7 я могу изменить тип клавиатуры, пока это firstResponder
( "на лету" ):
if (textField.text.length > 2) {
textField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
}
else
{
textField.keyboardType = UIKeyboardTypeDefault;
}
[textField reloadInputViews];
// (Omitting some efficiency stuff to keep example to bare bones)
Это больше не работает под Xcode 6/iOS 8. Документация в основном отражает изменения в пользовательской клавиатуре.
Использование функции resign/the first responder (все еще) работает:
[textField resignFirstResponder];
// Make keyboard change
[textField becomeFirstResponder];
Но это просто похоже на перебор. Это разрывает и восстанавливает стену, просто чтобы изменить картину на ней.
Здесь есть связанная запись: UITextView не реализует reloadInputViews
Но кажется, что решение (в комментарии) ", по-видимому, объявляет его как UITextView вместо UIResponder, влияет на то, как он себя ведет во время выполнения... и теперь он работает"
В моем случае это UITextField
, и я попытался направить на UITextView
на всякий случай. Нет.
Я еще раз повторю, что он хорошо работает под iOS7/Xcode5.
Я действительно не знаю, является ли это проблемой "бета" с Xcode 6 или изменением дизайна в iOS 8.