Есть ли способ узнать, что клавиатура iOS действительно скрыта (отклонена пользователем)?


Мне нужен способ обнаружить случай, когда пользователь отключает клавиатуру iOS вручную, используя кнопку "клавиатура" на клавиатуре. Я попытался использовать UIKeyboardDidHideNotification, но быстро обнаружил, что это событие также срабатывает, когда пользователь разбивает клавиатуру, оставляя ее на экране.
Есть ли способ узнать наверняка, что клавиатура действительно была скрыта?

2 2

2 ответа:

Чтобы получить решение, мне пришлось немного изменить свою первоначальную реализацию: Я заменил назначение nil члену inputView моего основного представления созданием и уничтожением пользовательского невидимого UIView<UIKeyInput> представления для отображения и скрытия клавиатуры соответственно. Это позволило мне переопределить метод resignFirstResponder этого представления, который Всегда вызывается при отставке клавиатуры - либо в обычном, либо в разделенном состоянии, когда пользователь отклоняет клавиатуру с помощью специальной кнопки или когда я удаляю ее программно.

Я считаю, что UIKeyboardDidHideNotification отправляется только тогда, когда клавиатура действительно исчезла. Из Apple docs:

Опубликовано сразу после увольнения с клавиатуры.

Однако вы также можете посмотреть, является ли какой-либо из ваших входных данных в настоящее время первым ответчиком:

BOOL keyboardUp = NO;

for (UIView *view in self.textInputs)
{
  if (view.isFirstResponder)
  {
    keyboardUp = YES;
    break;
  }
}