Iphone UITextField在辞职第一响应者身上的奇怪行为
已经是第二天了,还不能解决问题 我已经使用自定义的Iphone UITextField在辞职第一响应者身上的奇怪行为,iphone,ios,ipad,uitextfield,Iphone,Ios,Ipad,Uitextfield,已经是第二天了,还不能解决问题 我已经使用自定义的UICellView创建了UICellView,每个自定义的UICellView由UILabel和UITextField组成 自定义UICellViewobject allocsUITextField和UILabel在其init方法中,并在dealloc中发布 UITableView中自定义的uicellview数量为6 用户场景如下 当用户从1点单击到5点时,将打开虚拟键盘,用户键入一些文本 当用户单击第6个UITextField时,如果虚拟
UICellView
创建了UICellView
,每个自定义的UICellView
由UILabel
和UITextField
组成
自定义UICellView
object allocsUITextField
和UILabel
在其init
方法中,并在dealloc
中发布
UITableView
中自定义的uicellview
数量为6
用户场景如下
- 当用户从1点单击到5点时,将打开虚拟键盘,用户键入一些文本
- 当用户单击第6个
时,如果虚拟键盘处于活动状态,则应将其隐藏,如果虚拟键盘处于隐藏状态,则不应显示UITextField
UIViewController
类中实现UIExtFieldDelegate
协议,并将每个UIExtField
的委托设置为self
我的委托方法如下
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
[textField resignFirstResponder];
return NO;
}
}
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
-(void) textFieldDidBeginEditing:(UITextField *)textField {
/* Some code */
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
[textField resignFirstResponder];
}
所有功能都正常运行
所以现在,虚拟键盘永远不会被隐藏,为什么会发生这种情况
另外,类似的代码在iPhone上也有效,但在iPad上存在此问题。您是否为textField设置了操作
[YourTextField addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];
PS为任何ControlEvent设置任何选择器您是否为textField设置了操作
[YourTextField addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];
PS为任何ControlEvent设置任何选择器您需要知道上次使用的文本字段!因此,您可以执行
[lastUsedTextField resignFirstResponder]
有一个肮脏但有效的把戏。。您可以将文本字段设置为新的活动UITextField,并在下一个周期中立即调用resignFirstResponder:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
// this will schedule keyboard dismissal for the current text field
dispatch_async(dispatch_get_main_queue(), ^{
[textField resignFirstResponder];
});
return YES; // -> make this one active
}
}
您需要知道上次使用的文本字段!因此,您可以执行
[lastUsedTextField resignFirstResponder]
有一个肮脏但有效的把戏。。您可以将文本字段设置为新的活动UITextField,并在下一个周期中立即调用resignFirstResponder:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField.tag != 6) {
return YES;
} else {
// this will schedule keyboard dismissal for the current text field
dispatch_async(dispatch_get_main_queue(), ^{
[textField resignFirstResponder];
});
return YES; // -> make this one active
}
}
检查标记分配到UITextFields的情况。您是否已将标记设置在0-5或1-6范围内?标记是否正确,是否调用了相应的if's else分支,即resignFirstResponder。请检查标记分配到UITextFields的情况。您是否已将标记设置在0-5或1-6范围内?标记正确,相应的if's else分支被调用,即resignFirstResponder。否,我为什么要这样做?委托方法不就是为了这个目的吗?你测试过吗?你是舒尔公司的员工吗?是的,他们都是适当的员工。不,我为什么要这样做?委托方法不就是为了这个目的吗?你测试过吗?你是舒尔公司的员工吗?是的,他们都被适当地称呼为“谢谢你的人”!!!很多很多!!但我还是不明白为什么键盘没有隐藏在文本字段中。应该编辑吗?有什么想法吗?也许是因为焦点从一个领域转移到了另一个领域?在这种情况下,键盘仍处于打开状态,但您的文本字段不再是第一响应者,因此辞职的第一响应者将什么都不做,这仍然很奇怪,因为在iPhone上,相同的代码仍然有效。。。不过再次感谢!哦,谢谢你!!!很多很多!!但我还是不明白为什么键盘没有隐藏在文本字段中。应该编辑吗?有什么想法吗?也许是因为焦点从一个领域转移到了另一个领域?在这种情况下,键盘仍处于打开状态,但您的文本字段不再是第一响应者,因此辞职的第一响应者将什么都不做,这仍然很奇怪,因为在iPhone上,相同的代码仍然有效。。。不过再次感谢!