如何检查焦点是否从一个文本视图切换到另一个文本视图

时间:2013-09-06 19:03:06

标签: ios cocoa-touch uitextview

我有2个UITextFields。我可以通过以下方式检测其中任何一个用户的内容:

textFieldDidBeginEditing:(UITextField *)textField

哪个效果很好。但是我想让文本字段在用户不在其中任何一个内部时动画显示。目前我正在打电话:(void)textFieldDidEndEditing:(UITextField *)textField

然而,即使我从文本字段切换到另一个,也会调用此方法。有没有更好的方法来做这个?

3 个答案:

答案 0 :(得分:0)

didend上,检查您的任何一个文字视图当前是否为[textfield isFirstResponder][textfield isEditing]的第一个响应者。当一个结束而另一个控制时,可能会有轻微的延迟。如果是这种情况,那么您可以在使用performSelector:afterDelay稍微延迟后进行此检查。

答案 1 :(得分:0)

我要做的是添加一个BOOL标记来检测您是否应该为文本字段设置动画。它可以这样工作:

-(void)hideTextFields {
    if (self.shouldHideTextFields) {
        self.textField1.hidden = YES; // Or whatever you want to do with 
        self.textField2.hidden = YES; // your text fields
    }
}
  • 声明一个检查BOOL标志并决定是否隐藏文本字段的方法

  • 每当调用textFieldDidBeginEditing:(UITextField *)textField方法中的任何一个时,将BOOL标志(您可以将其称为'shouldHideTextFields')设置为NO

  • 每当调用textFieldDidEndEditing:(UITextField *)textField方法中的任何一个时,将BOOL标志设置为“YES”。另外,调用[self performSelector:@selector(hideTextFields) withObject:nil afterDelay:1];可以给用户一点时间来选择其他文本字段。如果他/她这样做,由于上述步骤,该标志将设置为NO

希望这有帮助!

答案 2 :(得分:0)

在textFieldDidEndEditing委托方法上,不要只执行消失的动画,而是在dispatch_async中执行此操作,检查现在是否没有textField编辑。 如果用户刚刚结束编辑一个文本字段,则不会有编辑文本字段。但是如果用户已切换到另一个文本字段,它将已经开始编辑,并且可以通过isFirstResponder方法轻松检查。