-1

我有 2 个 UITextFields。我可以通过以下方式检测用户何时进入其中:

textFieldDidBeginEditing:(UITextField *)textField

效果很好。但是我希望当用户不在其中任何一个内部时,文本字段会产生动画效果。目前我正在打电话:(void)textFieldDidEndEditing:(UITextField *)textField

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

4

3 回答 3

0

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

于 2013-09-06T20:40:55.623 回答
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如果他/她这样做了,由于上述步骤,标志将被设置为。

希望这可以帮助!

于 2013-09-06T19:32:58.750 回答
0

检查您的任何一个textviewsdidend当前是否是带有[textfield isFirstResponder]or的第一响应者[textfield isEditing]。当一个结束而另一个控制时,可能会有轻微的延迟。如果是这种情况,那么您可以在稍微延迟后使用performSelector:afterDelay.

于 2013-09-06T19:21:53.093 回答