在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)
Run Code Online (Sandbox Code Playgroud)
这在Xcode 6/iOS 8下不再有效.文档主要反映了有关自定义键盘的更改.
使用辞职/成为第一响应者是(仍然)工作:
[textField resignFirstResponder];
// Make keyboard change
[textField becomeFirstResponder];
Run Code Online (Sandbox Code Playgroud)
但这只是一种矫枉过正的感觉.它正在撕裂和重建墙壁,只是为了改变它上面的图片.
这里有一个相关的帖子: UITextView似乎没有实现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];
}
Run Code Online (Sandbox Code Playgroud)
虽然不是一个干净的方式,但它的工作原理.
我发现这在文本字段是第一响应者时有效:
[self.textField reloadInputViews];
[self.textField setText:@" "];
[self.textField setText:@""];
Run Code Online (Sandbox Code Playgroud)