KeyboardでTextFieldが隠れてしまう時に

レイアウトして、動作させてみた時に、キーボードでテキストフィールドが隠れてしまって驚くことがよく・・・

レイアウト自体を変更してやり過ごすことが多かったけど、きちんと対応するという意味で、テキストフィールドに入力しようとしたキーボードが表示された時に、テキストフィールドを見える位置まで移動させてみます。

ポイントとなるイベント

キーボードの表示/非表示の時に、Notifyされる以下のイベントに反応して対応します。

  • UIResponder.keyboardWillShowNotification
  • UIResponder.keyboardWillHideNotification

イベントに反応できるようにListenerを追加

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillBeShown(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillBeHidden(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)

上では、自クラスに、keyboardWillBeShownとkeyboardWillBeHiddenを追加して呼び出されるようにしてます。

画面を移動させる

画面全体か、特定の部品だけかは、好みだったり状況だったり。ここでは、View全体を移動させてます。
"let keyboardHeight:CGFloat = 200"の200は、画面サイズみて、適当に決めた値。

画面を移動させるコード

コード

@objc func keyboardWillBeShown(notification: NSNotification) {
    let keyboardHeight:CGFloat = 200
    let duration: TimeInterval? = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double
    UIView.animate(withDuration: duration!, animations: { () in
        self.view.transform = CGAffineTransform(translationX: 0, y: -keyboardHeight)
    })
}
@objc func keyboardWillBeHidden(notification: NSNotification) {
    let duration: TimeInterval? = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? Double
    UIView.animate(withDuration: duration!, animations: { () in
        self.view.transform = CGAffineTransform.identity
    })
}
MEMO
このサイトを参考にさせてもらいました。
実際には、上記サイトでは、移動距離の計算をきちんと書いているのですが、そこまでいらないかなぁと思って、適当にしたバージョンが、自分のコードです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です