UITextFieldなどでユーザーの入力を受け付ける時、キーボードが表示されますが、何も対処していないと、キーボードによって画面が隠れてしまいます。
特に、インプットする部分が画面の下側にあると、入力している最中の文字が見えなくなって、使いづらくなってしまいます。
今回は、キーボードが表示されたときに、画面を操作して入力欄が見えるようにする方法を記載します。
NotificationCenterにキーボードの通知を登録
キーボードの表示・非表示時を検知するために、NotificationCenterに通知を登録します。
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow(sender:)),
name: UIResponder.keyboardWillShowNotification,
object: nil)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillHide(sender:)),
name: UIResponder.keyboardWillHideNotification,
object: nil)
NotificationCenter.default.addObserver()
で通知を登録することが出来ます。
今回は、”name”に”UIResponder.keyboardWillShowNotification”(表示時)と”UIResponder.keyboardWillHideNotification”(非表示時)を登録します。
次に、それぞれの通知が飛んできたときに処理する関数を記述します。
キーボードのNotificationが飛んできたときの処理を記述
キーボード通知を登録する際に指定した関数を実装します。
@objc private func keyboardWillShow(sender: NSNotification) {}
@objc private func keyboardWillHide(sender: NSNotification) {}
このそれぞれの関数内で画面を操作するコードを記述していきいます。
以下は、UITextFieldでの例です。(UITextFieldをtextFieldという関数で保持している前提です。)
// キーボードが表示された時
@objc private func keyboardWillShow(sender: NSNotification) {
if textField.isFirstResponder {
guard let userInfo = sender.userInfo else { return }
let duration: Float = (userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! NSNumber).floatValue
UIView.animate(withDuration: TimeInterval(duration), animations: { () -> Void in
let transform = CGAffineTransform(translationX: 0, y: -150)
self.view.transform = transform
})
}
}
// キーボードが閉じられた時
@objc private func keyboardWillHide(sender: NSNotification) {
guard let userInfo = sender.userInfo else { return }
let duration: Float = (userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! NSNumber).floatValue
UIView.animate(withDuration: TimeInterval(duration), animations: { () -> Void in
self.view.transform = CGAffineTransform.identity
})
}
この例では、textFieldがfirst responderなら、キーボード表示・非表示に速度と同じ速度で、画面にアニメーション操作を加えるということを行っています。
CGAffineTransform(translationX: 0, y: -150)を作成しviewに当てることで、画面をy方向に-150動かしています。
その他にも、UITableViewのbottomConstraintの数値を操作したりするのも良いですね。
ココナラというサービスをご存知ですか?
ココナラは、プログラミングやウェブ制作、デザインなどの専門知識を持つ人たちが、自分のスキルを活かしてサービスを提供する場所です。
初学者の方でも気軽に相談できるため、自分のスキルアップにも最適です。また、自分自身もココナラでサービスを提供することができ、収入を得ることができます。
ぜひ、ココナラに会員登録して、新しい世界を体験してみましょう!