UITextField 在 reloadInputViews 调用后不再重新加载键盘类型

2024-01-11

在 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 的设计变更。


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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITextField 在 reloadInputViews 调用后不再重新加载键盘类型 的相关文章

随机推荐