Избегать прокрутки при переключении между текстовыми полями - PullRequest
0 голосов
/ 18 июля 2010

У меня есть контроллер представления для представления с шестью UITextFields. Всякий раз, когда пользователь выбирает текстовое поле, мне нужно прокручивать вещи вверх. Таким образом, все текстовые поля устанавливают контроллер представления в качестве соответствующих делегатов. Когда метод делегата запускается, он вызывает метод прокрутки для прокрутки вверх (если появляется клавиатура) или вниз (если он исчезает). Метод прокрутки выглядит следующим образом:

- (void) scroll: (CGFloat) distanceUp {
    [UIView beginAnimations:@"Scroll" context:NULL];
      //move some stuff up by distanceUp, or down if distanceUp is negative.
    [UIView commitAnimations];
}

Если пользователь выбирает текстовое поле, вводит значение, а затем нажимает кнопку «Готово» на клавиатуре, это работает нормально.

Проблема возникает, когда пользователь напрямую переключается с одного текстового поля на другое. В этом случае происходит то, что вид переходит вниз, а затем снова прокручивается вверх. Очевидно, я бы предпочел, чтобы он просто оставался на месте. Как мне это сделать?

1 Ответ

1 голос
/ 18 июля 2010

Как предложил комментатор tonclon, я использовал уведомления UIKeyboard вместо делегатов текстового поля.В viewDidLoad у меня есть следующее:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];

Методы клавиатурыWillShow / hide вызывают прокрутку вверх / вниз.

Я отменяю регистрацию в viewDidUnload и dealloc.[И я не уверен, необходимы ли обе эти отмены регистрации.]

...