我有2个UITextFields。我可以通过以下方式检测其中任何一个用户的内容:
textFieldDidBeginEditing:(UITextField *)textField
哪个效果很好。但是我想让文本字段在用户不在其中任何一个内部时动画显示。目前我正在打电话:(void)textFieldDidEndEditing:(UITextField *)textField
然而,即使我从文本字段切换到另一个,也会调用此方法。有没有更好的方法来做这个?
答案 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方法轻松检查。