Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我可以动态更改UITextField的属性UIReturnKeyType吗?_Iphone_Ios_Uitextfield - Fatal编程技术网

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

Iphone 我可以动态更改UITextField的属性UIReturnKeyType吗?,iphone,ios,uitextfield,Iphone,Ios,Uitextfield,我们可以将UITextField的此属性设置为“发送”、“搜索”、“转到”等: 但是在使用UITextField时设置它一点也不改变 我想要这种行为: 当UITextField为空时,将returnKeyType设置为“Return”,否则将returnKeyType设置为“Send”。通常,当键盘显示时,会检查returnKeyType和其他属性,但不会监控以后的更新。更改returnKeyType后,尝试在文本字段上调用reloadInputViews,这将指示它刷新键盘设置。不幸的是,-[

我们可以将UITextField的此属性设置为“发送”、“搜索”、“转到”等:

但是在使用UITextField时设置它一点也不改变

我想要这种行为:
当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];[文本视图成为第一响应者],一个接一个,将刷新键盘而不显示动画。