ブログBlog

キーボードの表示非表示

投稿日:2020年12月08日 トピックス

布内です。
iPadにはフローティングキーボードという機能があります。
通常のキーボードは、画面の下側にくっついていますが、フローディングキーボードは少し小さめのキーボードで、画面の好きな位置に移動させることができます。
キーボードで入力欄が見えない等、キーボードが邪魔な際に便利な機能です。

先日、このフローディングキーボードによって、アプリに不具合が発覚しました。
キーボードを入力する際に、入力欄が隠れないように画面をスクロールさせる処理ですが、NotificationCenterを使用してキーボードの表示非表示を取得します。
Swiftで記述すると次のような漢字でキーボードの表示非表示のタイミングを取得できます。
override func viewDidLoad() { super.viewDidLoad() let notification = NotificationCenter.default // キーボードを表示する時に呼ばれる notification.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) // キーボードを閉じる時に呼ばれる notification.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) } @objc func keyboardWillShow(_ notification: Notification?) { // キーボードを表示する時の処理をここに書く } @objc func keyboardWillHide(_ notification: Notification?) { // キーボードを閉じる時の処理をここに書く }
これでkeyboardWillShowにキーボードが表示される時の、keyboardWillHideにキーボードが閉じる時の処理を記述する事で、画面をスクロールさせたりできます。

ですが、フローティングキーボードの場合、keyboardWillShowNotificationもkeyboardWillHideNotificationも検知されず、上記コードの場合だとキーボードの表示非表示を検知できません。
ではどのように検知するのかですが、keyboardWillChangeFrameNotificationは検知する事ができます。
keyboardWillChangeFrameNotificationは表示する時、閉じる時と両方のタイミングで呼ばれる為、キーボードの情報から表示する時か閉じる時かの判別が必要になります。

keyboardWillShowNotification : キーボードを表示する直前に呼ばれます
keyboardWillHideNotification : キーボードを終了する直前に呼ばれます
keyboardWillChangeFrameNotification : キーボードが変更される直前に呼ばれます
PAGE TOP