[iPhone] UITextField がkeyboardで隠れないようにする

UITextFieldがスクリーンの下に配置された場合にKeyBoardで隠れてしまうことがあります。そのような場合はUIScrollViewを使って移動させれば解決ですね。
 
UITextField

Swift 5.1
Xcode 11.3.1

 

UITextFieldがKeyboardで隠れる

 
Androidであれば自動的にやってくれるのにと思うこともありますが、まあそれぞれコンセプトやらで違いがあるのは当然なのでしょう。逆にお互いに似通ったUIなどにすると「え〜っ」となりますので、勝手なもんです。

 

UIScrollView上にUITestFieldを設定する

 
基本的なUIScrollViewの使い方はこちらでやりました。今回はStoryBoardを使ってみます。
 
UIScrollViewをスクリーンにいっぱいに配置します。(後でコードで指定するのですが)

その上にUIImageView, UILabel, UITextField をそれぞれ配置
UILabelは背景を半透明の白にしてフォントを大きくして決めうちで「元気してる?」と入れました。
 

 
次はコードですが、こちらの基本的な内容を踏まえて、UIScrollViewの表示窓はスクリーンサイズにし、UIScrollViewの大きさをスクリーンの縦方向を2倍にしました。これで縦方向のみのスクロールになります。
 
ViewController.swift

 
これでStoryBoardの紐付けをそれぞれして起動してみます。
 

 
キーボードで隠れたので自分でスクロールさせて入力するところまでできました。
これを自動でやればいいのです、はい。

 

UIScrollViewを自動で移動させる

 
キーボードはUITextFieldを編集し始めると出現しますが、このタイミングで
UIRespomder.keyboardWillShowというNotificationが出ている訳です。

その情報をキャッチした後に、キーボードの上部とUITextFieldの底を調べて重なりを計算、重なっていた場合はUIScrollViewを移動させるというシナリオです。
 
viewWillAppearでNotificationCenterにkeyboardWillShowが現れるのをオブザーブさせます。
同様にKeyboardが隠れるケースkeyboardWillHideも監視させる。
 
viewWillDisappearではこれらを解放する処理も入れます。
 

 
上のSelectorで指定したfunctionを記述します。
 

 
50.0のオフセットを入れましたが状況に応じて変えてください

 

まとめのコード

 
以下まとめたものです。
 
ViewController.swift

 

 
スクロールできましたでしょうか
 

References:
How to make a UITextField move up when keyboard is present?
大きい画像を UIScrollView でスクロールする
TextField のキーボードを閉じる方法を3つ

一人でアプリ開発の限界を感じたら

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンライン・スクールがいいと思います。


TECH ACADEMY
自宅にいながら1時間でプログラミング基礎を習得

こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン



とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約20,000名の受講生と300社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


無料で転職まで
これはiOSアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールでエンジニアになって職を得たいのであれば手っ取り早いかもしれません


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

  • このエントリーをはてなブックマークに追加

フォローする