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 allocs
UITextField
UILabel
在其
init
方法中,并在
dealloc
中发布

UITableView
中自定义的
uicellview
数量为6

用户场景如下

  • 当用户从1点单击到5点时,将打开虚拟键盘,用户键入一些文本
  • 当用户单击第6个
    UITextField
    时,如果虚拟键盘处于活动状态,则应将其隐藏,如果虚拟键盘处于隐藏状态,则不应显示
在my
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上,相同的代码仍然有效。。。不过再次感谢!