我可以dynamic更改UITextField的属性UIReturnKeyType吗?
我们可以将UITextField的这个属性设置为“Send”,“Search”,“Go”等
@property(nonatomic) UIReturnKeyType returnKeyType
但是在使用UITextField时设置它并不会改变。
我想要这样的行为:当UITextField为空时,让returnKeyType为“Return”,否则让returnKeyType为“Send”。
通常情况下,键盘显示时会检查returnKeyType
和其他属性,但不会监视以后的更新。 尝试在更改returnKeyType
之后在文本字段上调用reloadInputViews
,它应该指示它刷新键盘设置。
不幸的是, -[reloadInputViews]
会搞乱双字节键盘上的键盘input。
双字节键盘(例如汉字)将临时字符放在文本字段中,并要求用户点击进入辅助键盘敲击以确认input的字符。 调用-[reloadInputViews]
放弃二级击键状态。
我还没有find这种情况下的解决scheme。
有人build议在textField上调用reloadInputViews来强制键盘的返回键更新。 不幸的是,当您调用textField上的reloadInputViews时,键盘会重置,这会将其更改回textField的默认值,例如从数字input切换到电子邮件input。 如果returnKeyType改变,你可以通过调用reloadInputViews来最小化发生这种情况的频率。
int currentTextFieldReturnKeyType = textField.returnKeyType; [textField setReturnKeyType:UIReturnKeyGo]; if (currentTextFieldReturnKeyType != textField.returnKeyType ) { [textField reloadInputViews]; }
这并不能完全解决问题,但将其最小化为返回键更改的一个按键。
正如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
将键盘重置为其初始UIKeyboardType
。 苹果应该给我们提供一个API来请求键盘的键盘types来重新加载input视图之前的设置。
使用新的iOS8 API,您可以创build自己的键盘来返回UIKeyboardType。
如果仍然使用iOS7,则可以询问某个键盘子视图处于哪种状态。 存储该值并在需要时重置。 看看我的来源: https : //github.com/ustwo/US2KeyboardType