ブログ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?) {
// キーボードを閉じる時の処理をここに書く
}
ですが、フローティングキーボードの場合、keyboardWillShowNotificationもkeyboardWillHideNotificationも検知されず、上記コードの場合だとキーボードの表示非表示を検知できません。
ではどのように検知するのかですが、keyboardWillChangeFrameNotificationは検知する事ができます。
keyboardWillChangeFrameNotificationは表示する時、閉じる時と両方のタイミングで呼ばれる為、キーボードの情報から表示する時か閉じる時かの判別が必要になります。
keyboardWillShowNotification : キーボードを表示する直前に呼ばれます
keyboardWillHideNotification : キーボードを終了する直前に呼ばれます
keyboardWillChangeFrameNotification : キーボードが変更される直前に呼ばれます