Я использую метод, описанный Джошем в этом вопросе , чтобы добавить панель инструментов в верхней части клавиатуры iPhone. По сути, идея такова:
- Добавить контроллер представления в качестве наблюдателя для уведомлений
UIKeyboardWillShowNotification
и UIKeyboardWillHideNotification
в методе его инициализации
- Всякий раз, когда эти уведомления публикуются, анимируйте панель инструментов на / выкл экрана вместе с клавиатурой
У меня также есть несколько полей UITextField на экране, все из которых становятся первыми респондентами при выборе для редактирования и уходят первыми респондентами, когда редактирование завершено (либо пользователь нажимает на другое текстовое поле, либо на любое текстовое поле, либо нажимает «Готово»). на клавиатуре - у меня textFieldShouldReturn:
переопределено на resignFirstResponder
).
У меня проблема, так как уведомления публикуются каждый раз, когда я переключаюсь между текстовыми полями. Например, если пользователь редактирует текстовое поле A, затем заканчивает его и нажимает на текстовое поле B, A уходит в отставку первым респондентом, а B становится первым респондентом. Тем не менее, он также отправляет уведомления «покажет» и «будет скрывать» в мой контроллер представления.
Конечным результатом всего этого является то, что, хотя панель инструментов появляется с клавиатурой для первого текстового поля и исчезает вместе с клавиатурой для последнего текстового поля, она появляется, чтобы скользить в клавиатуру и обратно из нее каждый раз, когда пользователь переключение между текстовыми полями.
Есть ли способ отвечать на уведомления "будет {показывать, скрывать}", только если клавиатура на самом деле собирается показать или скрыть? Другими словами, как я могу игнорировать уведомления, которые не приведут к изменению видимого состояния клавиатуры?