У меня есть экран, который выполняет анимацию (сдвигает экран вверх), когда пользователь вводит текстовое поле, поэтому он остается видимым при вводе данных, а затем сдвигается назад, как только пользователь будет вводить данные. Проблема, с которой я сталкиваюсь, заключается в том, что пользователь пытается использовать кнопку очистки внутри текстового поля (устанавливается с помощью 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){
}];
}
Ваш текст не имеет возвращаемого значения в 'textFieldShouldBeginEditing'? – pbasdf
Извините, скопируйте/вставьте ошибку, исправлено сообщение. Этот метод даже не нужен, я просто вставляю его, когда я отлаживаю такой трассировку через код и вижу, в каком порядке убедиться, что я правильно слежу за ним. –