UITextField清除按钮与屏幕动画一起使用
当用户输入文本字段时,我有一个屏幕可以执行动画(向上移动屏幕),以便在输入数据时保持可见状态,然后在用户输入数据后切换回来。我遇到的问题是当用户尝试使用文本框内的清除按钮(使用site_TextField.clearButtonMode = UITextFieldViewModeAlways进行设置)。文本字段中的流时,清除按钮被按下应该是:UITextField清除按钮与屏幕动画一起使用
textFieldShouldEndEditing - > textFieldDidEndEditing - > textFieldShouldClear - > textFieldShouldBeginEditing - > textFieldDidBeginEditing
然而,textFieldDidEndEditing方法,其中动画是在执行动画时调用,上面的序列停止,并且不调用textFieldShouldClear。我希望这是简单的,我只是想念。任何输入是赞赏!
- (BOOL)textFieldShouldBeginEditing:(UITextField *) textField
{
NSLog(@"In textFieldShouldBeginEditing");
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField == site_TextField || textField == phone_TextField) {
[self animateTextField: textField up: YES];
}
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
NSLog(@"In textFieldShouldEndEditing");
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField == site_TextField || textField == phone_TextField) {
[self animateTextField: textField up: NO];
}
}
- (BOOL)textFieldShouldClear:(UITextField *)textField {
NSLog(@"In textFieldShouldClear");
return YES;
}
- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
if (textField != site_TextField && textField != phone_TextField) {
return;
}
int movementDistance = 0;
if (textField == site_TextField) {
movementDistance = 100;
} else if (textField == phone_TextField) {
movementDistance = 170;
}
int movement = (up ? -movementDistance : movementDistance);
[UIView animateWithDuration:0.3
delay:0.0
options: UIViewAnimationOptionAllowUserInteraction
animations:^{
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
}
completion:^(BOOL finished){
}];
}
我怀疑第一textFieldShouldEndEditing
和textFieldDidEndEditing
通过触摸向下清除按钮触发。触摸起来触发textFieldShouldClear
。但在动画中,textField会在触摸后立即移动,因此触摸不会进行注册。尝试使用textField didEndOnExit
事件来触发动画关闭的方法。
这确实让我接近我想做的事(我从委托实现了textFieldShouldReturn,但我相信它们都是由同一个事件触发的)。我还使用手势识别器来结束编辑,并且还必须从手势识别器的目标中调用动画代码。 – 2014-09-04 01:47:53
你的'textFieldShouldBeginEditing'没有返回值? – pbasdf 2014-09-02 22:47:42
对不起,复制/粘贴错误,修复了帖子。这个方法甚至不需要在那里,我只是在调试的时候把它放进去,通过代码跟踪,看看按照什么顺序来确保我正确地跟踪它。 – 2014-09-03 03:04:40