[Swift3.0] NotificationCenterでキーボード表示時にその高さを取得する

2016年10月30日(更新: 2016年10月30日)

UITextField などをタップした時に出現するキーボードの高さを取得したいという場合があります。

これは、キーボード出現時に NotificationCenter で通知を送る設定をすることで実現できます。

キーボードの高さを取得するサンプルソースコード

Swift3では以前より簡潔に書くことができます。

NotificationCenterの設定

ViewController の viewDidLoad などで、以下のように NotificationCenter の登録を行っておきます。

NotificationCenter.default.addObserver(
    self, 
    selector: #selector(self.showKeyboard(notification:)), 
    name: NSNotification.Name.UIKeyboardDidShow, 
    object: nil
)

第3引数 name に NSNotification.Name.UIKeyboardDidShow を設定することで、キーボード出現後に通知を行うメソッドを設定できます。

キーボードの情報を受け取るメソッドを設定

キーボード出現後に、第2引数として登録した以下のメソッド showKeyboard(notification:) が呼び出されます。

    func showKeyboard(notification: Notification) {
        
        if let userInfo = notification.userInfo {
            if let keyboardFrameInfo = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue {
                // キーボードの高さを取得
                print(keyboardFrameInfo.cgRectValue.height)
            }
        }
    }

このとき、このメソッドの引数 notificationuserInfo にキーボードに関する情報が含まれています。

print で notification を出力してみると、その中身が以下のようになっていることが確認できます。

UIKeyboardDidShowNotification の中身

userInfo の index に引き出したい情報に関する値を入れます。ここでは UIKeyboardFrameEndUserInfoKey を index として指定します。

例えば、iPhone5のシミュレータでは「253.0」が出力されます。

[Swift3.0] NotificationCenterでキーボード表示時にその高さを取得する」への1件のフィードバック

  1. ピンバック: キーボードで入力欄が隠れないように対応[Swift4](2018/3/29追記) | Let's enjoy programming !

コメントを残す

メールアドレスが公開されることはありません。