在 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 下不再有效。文档主要反映了以下方面的更改custom键盘。
使用辞职/成为第一响应者(仍然)有效:
[textField resignFirstResponder];
// Make keyboard change
[textField becomeFirstResponder];
但这感觉有点矫枉过正。它正在撕毁并重建一堵墙,只是为了改变上面的一幅画。
这里有一个相关的帖子:UITextView似乎没有实现reloadInputViews https://stackoverflow.com/questions/4005738/uitextview-does-not-seem-to-implement-reloadinputviews
但似乎解决方案(在评论中)是“显然将其声明为 UITextView 而不是 UIResponder 会影响它在运行时的行为方式。 ...现在可以了"
就我而言is a UITextField
,我尝试投射到UITextView
万一。不去。
我会再次提到它is在 iOS7 / Xcode5 下运行良好。
我真的不知道这是 Xcode 6 的“测试版”问题,还是 iOS 8 的设计变更。