关于ios:UITextField清除按钮用于屏幕动画

UITextField clear button use with screen animation

当用户输入文本字段时,我有一个执行动画的屏幕(向上移动屏幕),以便在输入数据时保持可见,然后在用户输入数据后向下移动。 我遇到的问题是当用户尝试使用文本框内的清除按钮时(使用site_TextField.clearButtonMode = UITextFieldViewModeAlways设置)。 按下清除按钮时文本字段的流程应为:

textFieldShouldEndEditing - > textFieldDidEndEditing - > textFieldShouldClear - > textFieldShouldBeginEditing - > textFieldDidBeginEditing

但是,textFieldDidEndEditing方法是调用动画的位置,执行动画时,上面的序列停止,并且不调用textFieldShouldClear。 我希望这是一件简单的事,我只是想念。 任何输入都表示赞赏!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
- (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){
                     }];
}


我怀疑第一个textFieldShouldEndEditingtextFieldDidEndEditing是通过触摸清除按钮触发的。 并且textFieldShouldClear由触摸触发。 但是对于动画,textField会在触摸后立即移动,因此触摸不会注册。 尝试使用textField didEndOnExit事件来触发向下执行动画的方法。