2011-05-11 67 views
9

我们可以设置的UITextField的这个属性为“发送”,“搜索”,“加油”等:我可以动态更改UITextField的属性UIReturnKeyType吗?

@property(nonatomic) UIReturnKeyType returnKeyType 

但是在使用的UITextField设置它并没有改变。

我想要这样的行为: 当UITextField为空时,让returnKeyType为“Return”,否则让returnKeyType为“Send”。

回答

17

通常,在显示键盘时会检查returnKeyType和其他属性,但在以后的更新中不会进行监视。在更改returnKeyType之后,请尝试在文本字段中调用reloadInputViews,这应该指示它刷新键盘设置。

+0

它似乎工作。谢谢。 – yehnan 2011-05-11 02:45:20

+0

不适用于iOS 9 - 尝试使用http:// stackoverflow。com/a/19405954/1633251 – 2016-06-11 05:00:47

7

不幸的是,-[reloadInputViews]会搞乱双字节键盘上的键盘输入。

双字节键盘(例如汉字)在文本字段中放置了临时字符,并要求用户点击输入辅助键击以确认输入的字符。调用-[reloadInputViews]放弃二级击键状态。

我还没有找到这种情况下的解决方案。

+0

当您在textField上调用reloadInputViews时,键盘会重置,这会将其更改回textField的默认值,例如从数字输入切换到电子邮件输入。如果returnKeyType更改,您可以通过仅调用reloadInputViews来最小化发生这种情况的频率。代码见下面的答案。 – 2013-05-02 20:43:32

+0

调用'[textField resignFirstResponder]; [textView becomeFirstResponder];',一个接一个地刷新键盘而不用动画。 – cnotethegr8 2016-02-10 10:00:33

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]; 

} 
2

有人建议调用reloadInputViews在textField上强制键盘的返回键进行更新。不幸的是,当您在textField上调用reloadInputViews时,键盘会重置,这会将其更改回textField的默认值,例如从数字输入切换到电子邮件输入。如果returnKeyType更改,您可以通过仅调用reloadInputViews来最小化发生这种情况的频率。

int currentTextFieldReturnKeyType = textField.returnKeyType; 
[textField setReturnKeyType:UIReturnKeyGo]; 
if (currentTextFieldReturnKeyType != textField.returnKeyType) { 
    [textField reloadInputViews]; 
} 

这并不能完全解决问题,但会将其最小化为返回键更改的一个按键。

0

正如大家所说,reloadInputViews将键盘重置为其初始UIKeyboardType。苹果应该给我们一个API来让键盘输入它的键盘类型,以便将它重新加载到输入视图之前的状态。

使用新的iOS8 API,您可以创建自己的键盘来返回UIKeyboardType。

如果仍然使用iOS7,您可以询问某个键盘子视图处于哪种状态。存储该值并在需要时重置。看看我的来源:https://github.com/ustwo/US2KeyboardType

相关问题