在iOS 7中,我可以改变键盘类型,而它是第一个响应器(即时):
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.文档主要反映了有关自定义键盘的更改.
使用辞职/成为第一反应者(仍然)工作:
[textField resignFirstResponder]; // Make keyboard change [textField becomeFirstResponder];
但它只是感觉像一个过度的杀戮.它正在撕裂和重建一堵墙,只是为了更换一张照片.
这里有一个相关的帖子:
UITextView does not seem to implement reloadInputViews
但似乎解决方案(在注释中)显然是将其声明为UITextView,而不是UIResponder会影响运行时的行为.
在我的情况下,它是一个UITextField,我试图转换到UITextView以防万一.不去
再次提到它在iOS7 / Xcode5下运行良好.
我不知道这是Xcode 6的“beta”问题,还是iOS 8的设计变更.
解决方法
我发现同样的问题.最好检查textField是否已经是firstResponder.
[textField reloadInputViews]; // does not work on iOS8 ! if ([textField isFirstResponder]) { [textField resignFirstResponder]; [textField becomeFirstResponder]; }
不是一个干净的方式,但它的作品.