我可以动态更改UITextField的属性UIReturnKeyType吗?

时间:2011-05-11 02:00:16

标签: iphone ios uitextfield

我们可以将UITextField的这个属性设置为“Send”,“Search”,“Go”等:

@property(nonatomic) UIReturnKeyType returnKeyType

但是在使用UITextField时设置它根本不会改变。

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

5 个答案:

答案 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