我有 2 个 UITextFields。我可以通过以下方式检测用户何时进入其中:
textFieldDidBeginEditing:(UITextField *)textField
效果很好。但是我希望当用户不在其中任何一个内部时,文本字段会产生动画效果。目前我正在打电话:(void)textFieldDidEndEditing:(UITextField *)textField
但是,即使我从一个文本字段切换到另一个,也会调用它。有没有更好的方法来调用这样做?
我有 2 个 UITextFields。我可以通过以下方式检测用户何时进入其中:
textFieldDidBeginEditing:(UITextField *)textField
效果很好。但是我希望当用户不在其中任何一个内部时,文本字段会产生动画效果。目前我正在打电话:(void)textFieldDidEndEditing:(UITextField *)textField
但是,即使我从一个文本字段切换到另一个,也会调用它。有没有更好的方法来调用这样做?
在 textFieldDidEndEditing 委托方法上,不要只执行消失的动画,而是在 dispatch_async 中执行此操作,检查当前是否没有 textField 编辑。如果用户刚刚结束编辑一个文本字段,则不会有编辑文本字段。但是如果用户已经切换到另一个文本字段,它将已经开始编辑,并且可以通过 isFirstResponder 方法轻松检查。
我要做的是添加一个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
如果他/她这样做了,由于上述步骤,标志将被设置为。希望这可以帮助!
检查您的任何一个textviewsdidend
当前是否是带有[textfield isFirstResponder]
or的第一响应者[textfield isEditing]
。当一个结束而另一个控制时,可能会有轻微的延迟。如果是这种情况,那么您可以在稍微延迟后使用performSelector:afterDelay
.