Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITextField清除按钮与屏幕动画一起使用_Ios_Animation_Uitextfield_Uitextfielddelegate - Fatal编程技术网

Ios UITextField清除按钮与屏幕动画一起使用

Ios UITextField清除按钮与屏幕动画一起使用,ios,animation,uitextfield,uitextfielddelegate,Ios,Animation,Uitextfield,Uitextfielddelegate,我有一个屏幕,当用户输入一个文本字段时,它会执行一个动画(向上移动屏幕),以便在输入数据时保持可见,然后在用户输入数据后向下移动。我遇到的问题是当用户试图使用文本框内的清除按钮时(使用site\u TextField.clearButtonMode=UITextFieldViewModeAlways设置)。按下清除按钮时,文本字段的流程应为: textFieldShouldEndEditing-->TextFieldDiEndediting-->textFieldShouldClear-->te

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

textFieldShouldEndEditing-->TextFieldDiEndediting-->textFieldShouldClear-->textFieldShouldBeginEditing-->textFieldDidBeginEditing

但是,textfielddidediting方法是从中调用动画的方法,当执行动画时,上述序列停止,而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){
                     }];
}

我怀疑第一个
textfield应该取消编辑
textfield取消编辑
是通过按下清除按钮触发的。触摸会触发
文本字段shouldClear
。但在动画中,文本字段会在触碰后立即移动,因此不会注册触碰。尝试使用textField
didenonexit
事件触发关闭动画的方法。

您的
textField应该开始编辑
没有返回值?抱歉,复制/粘贴错误,修复了帖子。该方法甚至不需要存在,我只是在调试时将其放入,以便跟踪代码并查看顺序,以确保正确遵循它。这确实让我接近了我想要做的事情(我实现了textFieldShouldReturn,但我相信它们都是由同一事件触发的)。我还使用手势识别器来结束编辑,还必须从目标调用手势识别器的动画代码。