我们可以设置的UITextField的这个属性为“发送”,“搜索”,“加油”等:我可以动态更改UITextField的属性UIReturnKeyType吗?
@property(nonatomic) UIReturnKeyType returnKeyType
但是在使用的UITextField设置它并没有改变。
我想要这样的行为: 当UITextField为空时,让returnKeyType为“Return”,否则让returnKeyType为“Send”。
我们可以设置的UITextField的这个属性为“发送”,“搜索”,“加油”等:我可以动态更改UITextField的属性UIReturnKeyType吗?
@property(nonatomic) UIReturnKeyType returnKeyType
但是在使用的UITextField设置它并没有改变。
我想要这样的行为: 当UITextField为空时,让returnKeyType为“Return”,否则让returnKeyType为“Send”。
通常,在显示键盘时会检查returnKeyType
和其他属性,但在以后的更新中不会进行监视。在更改returnKeyType
之后,请尝试在文本字段中调用reloadInputViews
,这应该指示它刷新键盘设置。
不幸的是,-[reloadInputViews]
会搞乱双字节键盘上的键盘输入。
双字节键盘(例如汉字)在文本字段中放置了临时字符,并要求用户点击输入辅助键击以确认输入的字符。调用-[reloadInputViews]
放弃二级击键状态。
我还没有找到这种情况下的解决方案。
当您在textField上调用reloadInputViews时,键盘会重置,这会将其更改回textField的默认值,例如从数字输入切换到电子邮件输入。如果returnKeyType更改,您可以通过仅调用reloadInputViews来最小化发生这种情况的频率。代码见下面的答案。 – 2013-05-02 20:43:32
调用'[textField resignFirstResponder]; [textView becomeFirstResponder];',一个接一个地刷新键盘而不用动画。 – cnotethegr8 2016-02-10 10:00:33
正如Animie所说,最好的方法是让reloadInputViews
告诉键盘有关的变化。
你可以这样做:
- (void)textFieldDidBeginEditing:(UITextField *)textField{
if(self.myTextField.editing){
self.myTextField.editing.returnKeyType = UIReturnKeyNext;// or UIReturnKeyGo, etc.
}
}
在你的代码
某处,在viewDidLoad中例如,注册UIKeyboardWillShowNotification
:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
而且当键盘显示出来,你reloadInputViews
:
- (void)keyboardWillShow:(NSNotification *)notification{
[self.myTextField reloadInputViews];
}
有人建议调用reloadInputViews在textField上强制键盘的返回键进行更新。不幸的是,当您在textField上调用reloadInputViews时,键盘会重置,这会将其更改回textField的默认值,例如从数字输入切换到电子邮件输入。如果returnKeyType更改,您可以通过仅调用reloadInputViews来最小化发生这种情况的频率。
int currentTextFieldReturnKeyType = textField.returnKeyType;
[textField setReturnKeyType:UIReturnKeyGo];
if (currentTextFieldReturnKeyType != textField.returnKeyType) {
[textField reloadInputViews];
}
这并不能完全解决问题,但会将其最小化为返回键更改的一个按键。
正如大家所说,reloadInputViews
将键盘重置为其初始UIKeyboardType
。苹果应该给我们一个API来让键盘输入它的键盘类型,以便将它重新加载到输入视图之前的状态。
使用新的iOS8 API,您可以创建自己的键盘来返回UIKeyboardType。
如果仍然使用iOS7,您可以询问某个键盘子视图处于哪种状态。存储该值并在需要时重置。看看我的来源:https://github.com/ustwo/US2KeyboardType
它似乎工作。谢谢。 – yehnan 2011-05-11 02:45:20
不适用于iOS 9 - 尝试使用http:// stackoverflow。com/a/19405954/1633251 – 2016-06-11 05:00:47