клавиатураWillShow вызывается дважды - PullRequest
9 голосов
/ 10 ноября 2011

У меня есть вид с уведомлениями клавиатуры, такими как keyboardWillShow и keyboardWillHide

Все дескрипторы кодов с уведомлением, которое я использую, взяты из примера кода Apple "KeyboardAccessory"

Когда я впервые вхожу в это представление, все работает нормально.

Но когда я возвращаюсь к этому представлению из его подпредставлений, каждый раз, когда я нажимаю кнопку, которая говорит:

[myTextField becomeFirstResponder];

методы keyboardWillShow и keyboardWillHide будут вызываться дважды каждый раз.

Это действительно сбивает с толку,

Может ли кто-нибудь помочь мне с этим?

действительно ценю!

Ответы [ 4 ]

12 голосов
/ 11 ноября 2011

Возможно, вы захотите опубликовать свой код.

Если ваши методы вызываются дважды, скорее всего, вы регистрируетесь для уведомлений с клавиатуры несколько раз и не удаляете наблюдателя, когда вы так думаете.

Добавьте своего наблюдателя в viewWillAppear: и удалите его в viewWillDisappear: и посмотрите, что произойдет.

8 голосов
/ 27 декабря 2014

Он вызывается дважды в iOS 8, когда отображается настраиваемая клавиатура, например SwiftKey.

При первом вызове он, вероятно, готовится к показу, поэтому CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; будет иметь высоту клавиатурыиз 0 .

Второй вызов будет иметь правильную высоту клавиатуры, поэтому, если вам нужно настроить вставки содержимого, вы можете проверить, что высота возвращаемой клавиатуры равна> 0, прежде чем вычислять ваши вставки.

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

3 голосов
/ 10 июня 2016

Для меня изменение inputAccessoryView вызовет еще один вызов keyboardWillShow, поскольку высота вспомогательного вида ввода влияет на общую высоту клавиатуры.

0 голосов
/ 09 августа 2018

Моя проблема решена с помощью Clean Build Folder ... , это было не так очевидно.

Перейдите к Product , нажмите на клавиатуре ALT и выберите Очистить папку сборки ...

...