Проблема с уведомлением iOS

Я работаю над уведомлением, и я понимаю, что уведомления IOS, такие как «textFieldShouldBeginEditing: (UITextField *) iTextField», публикуются только при нажатии на текстовое поле.

К моему странному уведомлению, мой код получает это уведомление, когда я нажимаю кнопку «Назад», чтобы вернуться к моему предыдущему виду.

Каковы возможные шансы, что я снова получу это уведомление. Я считаю, что нам не нужно регистрироваться для таких уведомлений. Я зарегистрировался только для скрытия/отображения клавиатуры.

Пожалуйста, предложите.


person Abhinav    schedule 03.11.2010    source источник
comment
Пожалуйста, рассмотрите возможность использования более описательного заголовка вопроса.   -  person Justin    schedule 03.11.2010


Ответы (2)


Я нашел проблему. Проблема заключалась в том, что я добавлял свое текстовое поле в качестве первого ответчика перед вызовом сервера, а затем удалял его только тогда, когда вы нажимали кнопку возврата или нажимали любое другое текстовое поле. Вот почему он не уходил в отставку при нажатии кнопки «Назад». Теперь я отказался от него вскоре после вызова сервера.

person Abhinav    schedule 03.11.2010
comment
Рад, что у вас получилось, но чем это отличается от предложения в моем последнем комментарии? - person Justin; 05.11.2010
comment
Ну, насколько я понимаю, ваш путь мне не помог, потому что мое текстовое поле все еще действовало как ответчик, и после метода keyboardwillhide оно всегда шло к textFieldWillRespond, даже если мы помещаем туда оператор возврата. - person Abhinav; 07.11.2010
comment
Да, я сначала неправильно понял ваш вопрос, но в конце концов порекомендовал вам просто позвонить resignFirstResponder, поскольку у вас есть ссылка на поле. Это не важно. Если это работает и кто-то еще может найти ответ здесь, то все в порядке. - person Justin; 08.11.2010

Изменить: я неправильно понял вопрос. Смотрите ответ ОП.

Клавиатура пропадет при навигации. Имеет смысл, что уведомление публикуется в этом случае. Один из способов игнорировать уведомления, сгенерированные в ответ на переходы представления, — это отслеживать состояние вашего контроллера представления.

- (void)viewWillDisappear:(BOOL)animated {
    _transitioningView = YES;
}

- (void)viewDidDisappear:(BOOL)animated {
    _transitioningView = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    _transitioningView = YES;
}

- (void)viewDidAppear:(BOOL)animated {
    _transitioningView = NO;
}

Теперь в селекторе, вызываемом вашим уведомлением с клавиатуры, вы можете просто вернуться, если вид переходит.

- (void)keyboardWillHide:(NSNotification*)notif {
    if (_transitioningView)
        return;
    // Handle keyboard dismissal.
}
person Justin    schedule 03.11.2010
comment
Это не помогает. Помещение оператора return не нарушает поток. Он все еще ведет меня к методу textFieldShouldBeginEditing: (UITextField *) iTextField :( - person Abhinav; 04.11.2010
comment
Тогда я не правильно понял ваш вопрос. Вы говорите, что textFieldShouldBeginEditing: вызывается, когда вы уходите от родительского контроллера представления поля? - person Justin; 04.11.2010
comment
Позвольте мне объяснить это более подробно. Когда я нажимаю на свое текстовое поле, я устанавливаю это текстовое поле в качестве первого ответчика с помощью self.parentController setFirstResponderView:iTextField]. Теперь, когда я нажимаю кнопку «Назад», я никак не могу уйти в отставку в качестве первого ответчика для этого текстового поля. Что создает проблему. - person Abhinav; 04.11.2010
comment
Я понимаю, что клавиатура исчезнет при навигации, но затем она снова появится, потому что мое текстовое поле по-прежнему является первым ответчиком для этого текстового поля. Я не отказался от этого. - person Abhinav; 04.11.2010
comment
Почему бы не сохранить ссылку на текстовое поле и не вызвать resignFirstResponder? - person Justin; 04.11.2010