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

时间:2014-07-03 06:23:34

标签: ios8 xcode6

在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 /成为第一响应者(仍在)工作:

[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中的设计更改。

2 个答案:

答案 0 :(得分:7)

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

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

if ([textField isFirstResponder]) {
    [textField resignFirstResponder];
    [textField becomeFirstResponder];
}

虽然不是一个干净的方式,但它确实有效。

答案 1 :(得分:4)

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

[self.textField reloadInputViews];
[self.textField setText:@" "];
[self.textField setText:@""];