Iphone 我可以动态更改UITextField的属性UIReturnKeyType吗?
我们可以将UITextField的此属性设置为“发送”、“搜索”、“转到”等: 但是在使用UITextField时设置它一点也不改变 我想要这种行为:Iphone 我可以动态更改UITextField的属性UIReturnKeyType吗?,iphone,ios,uitextfield,Iphone,Ios,Uitextfield,我们可以将UITextField的此属性设置为“发送”、“搜索”、“转到”等: 但是在使用UITextField时设置它一点也不改变 我想要这种行为: 当UITextField为空时,将returnKeyType设置为“Return”,否则将returnKeyType设置为“Send”。通常,当键盘显示时,会检查returnKeyType和其他属性,但不会监控以后的更新。更改returnKeyType后,尝试在文本字段上调用reloadInputViews,这将指示它刷新键盘设置。不幸的是,-[
当UITextField为空时,将returnKeyType设置为“Return”,否则将returnKeyType设置为“Send”。通常,当键盘显示时,会检查
returnKeyType
和其他属性,但不会监控以后的更新。更改returnKeyType
后,尝试在文本字段上调用reloadInputViews
,这将指示它刷新键盘设置。不幸的是,-[reloadInputViews]
将使双字节键盘上的键盘输入混乱
双字节键盘(例如汉字)将临时字符放在文本字段中,并要求用户按enter键以确认输入的字符。调用-[reloadInputViews]
将放弃辅助击键状态
我还没有找到这种情况的解决方案。正如Animie所说,最好的方法是
重新加载InputViews
来告诉键盘有关更改的信息
int currentTextFieldReturnKeyType = textField.returnKeyType;
[textField setReturnKeyType:UIReturnKeyGo];
if (currentTextFieldReturnKeyType != textField.returnKeyType ) {
[textField 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];
当键盘出现时,您可以重新加载InputView
:
- (void)keyboardWillShow:(NSNotification *)notification{
[self.myTextField reloadInputViews];
}
一些人建议在textField上调用reloadinputview来强制更新键盘的return键。不幸的是,当您在文本字段上调用ReloadInputView时,键盘会重置,这会将其更改回文本字段的默认值,例如,从数字输入切换到电子邮件输入。如果returnKeyType发生更改,只需调用ReloadInputView,就可以将这种情况发生的频率降至最低
int currentTextFieldReturnKeyType = textField.returnKeyType;
[textField setReturnKeyType:UIReturnKeyGo];
if (currentTextFieldReturnKeyType != textField.returnKeyType ) {
[textField reloadInputViews];
}
这并不能完全解决问题,但可以将问题最小化为返回键更改时的一次击键。正如大家所说,
reloadInputViews
将键盘重置为其初始UIKeyboardType
。苹果应该给我们一个API,要求键盘输入其键盘类型,以便在重新加载输入视图之前将其设置回原来的状态
使用新的IOS8API,您可以创建自己的键盘,返回UIKeyboardType
如果仍然使用iOS7,您可以询问某个键盘子视图它处于哪个状态。存储该值并在需要时重置。查看我的来源:当您在文本字段上调用ReloadInputView时,键盘会重置,这会将其更改回文本字段的默认值,例如,从数字输入切换到电子邮件输入。如果returnKeyType发生更改,只需调用ReloadInputView,就可以将这种情况发生的频率降至最低。关于代码,请参阅下面的答案。调用
[textField resignFirstResponder];[文本视图成为第一响应者]代码>,一个接一个,将刷新键盘而不显示动画。