我们可以将UITextField的这个属性设置为“Send”,“Search”,“Go”等:
@property(nonatomic) UIReturnKeyType returnKeyType
但是在使用UITextField时设置它根本不会改变。
我想要这种行为: 当UITextField为空时,让returnKeyType为“Return”,否则让returnKeyType为“Send”。
答案 0 :(得分:18)
通常,在显示键盘时会检查returnKeyType
和其他属性,但不会监视这些属性以供以后更新。更改reloadInputViews
后,请尝试在文本字段上调用returnKeyType
,这应指示其刷新键盘设置。
答案 1 :(得分:7)
不幸的是,-[reloadInputViews]
会破坏双字节键盘上的键盘输入。
双字节键盘(例如汉字)在文本字段中放置临时字符,并要求用户点击输入辅助键击以确认输入的字符。调用-[reloadInputViews]
放弃次要击键状态。
我还没有找到适合这种情况的解决方案。
答案 2 :(得分:2)
有些人建议在textField上调用reloadInputViews来强制键盘的返回键进行更新。不幸的是,当您在textField上调用reloadInputViews时键盘会重置,这会将其更改回textField的默认值,例如,从数字条目切换到电子邮件条目。如果returnKeyType发生变化,只需调用reloadInputViews,就可以最大限度地减少这种情况。
int currentTextFieldReturnKeyType = textField.returnKeyType;
[textField setReturnKeyType:UIReturnKeyGo];
if (currentTextFieldReturnKeyType != textField.returnKeyType ) {
[textField reloadInputViews];
}
这并不能完全解决问题,但会将其最小化到返回键更改的一次击键。
答案 3 :(得分:1)
正如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];
}
答案 4 :(得分:0)
正如大家所说,reloadInputViews
将键盘重置为其初始UIKeyboardType
。 Apple应该给我们一个API来询问键盘的键盘类型,以便在重新加载输入视图之前将其设置回原来的状态。
使用新的iOS8 API,您可以创建自己的键盘,返回UIKeyboardType。
如果仍在使用iOS7,您可以询问某个键盘子视图的状态。存储该值并在需要时重置。在这里查看我的来源:https://github.com/ustwo/US2KeyboardType