在reloadInputViews调用之后,UITextField不再重新加载keyboardType

bau*_*sic 10 xcode6 ios8

在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中的设计更改.

Adn*_*nan 7

我发现了同样的问题.最好检查textField是否已经是firstResponder.

[textField reloadInputViews]; // does not work on iOS8 !

if ([textField isFirstResponder]) {
    [textField resignFirstResponder];
    [textField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

虽然不是一个干净的方式,但它的工作原理.


pic*_*ick 5

我发现这在文本字段是第一响应者时有效:

[self.textField reloadInputViews];
[self.textField setText:@" "];
[self.textField setText:@""];
Run Code Online (Sandbox Code Playgroud)