【SwiftUI】キーボードでTextfieldを隠さない方法【Keyboard Observingの導入方法をCocoaPodsのインストールから解説】

この記事では、SwiftUIのキーボードでTextfieldを隠さない方法について解説します。

テキストを入力するTextfieldが、画面上部にある場合は、入力用のキーボードは表示されても入力の妨げにはなりませんが、画面下部や、スクロールが必要な場所にある場合は対策が必要です。

 

Keyboard Observingという非常に簡単に導入できる便利なモジュールがあるので、今回はそちらを利用する方法を紹介します。

また、キーボード内の【リターン】や【改行】キーを押さなくても、画面をタップしてキーボードを消せる方法も一緒に解説します。

 

モジュールの導入を便利でするCocoaPodsのインストールの方法から解説していきます。

 

◆動作検証環境

・ローカル環境:mac Catalina
・XCode:12.1
・SwiftUI:2.0
スポンサードリンク

CocoaPodsのインストール

 

まずは下記のコマンドを実行してCocoaPodsをインストールします。

 

インストールが終わったら、次のコマンドで初期化を行います。

 

XcodeプロジェクトへCocoaPodsを導入する

 

導入の作業の前に、Xcodeのプロジェクトが開かれているか確認します。開いている場合はプロジェクトを閉じます。

 

プロジェクトディレクトリへの移動

 

CocoaPodsファイルの作成

 

Podfileの編集(KeyboardObservingの導入)

さきほどのpod init を行ったディレクトリにPodfile が作成されるので、内容を下記のように編集します。

 

編集後に下記コマンドでKeyboardObserving のインストールを行います。

 

インストール後の更新作業は下記コマンドで行います。

 

 

対象のモジュールのインストール後からは、ProjectName.xcworkspace で作業、編集を行います(ProjectName.xcodeproj ではない。)

 

KeyboardObservingを利用する

 

ここまでの作業でKeyboardObservingを利用できる準備が整ったので早速、対象のファイルで使用していきます。

 

import KeyboardObserving でインポートを行います。

 

対象のフィールドをタップした際に、View単位で移動させます。

対象のViewに.keyboardObserving()でモディファイアを行います。

 

スポンサードリンク

TextField以外の場所をタップしてキーボードを閉じる方法

 

通常の設定の場合、TextFieldを閉じる方法はキーボード内の[return]や[改行]を選択する必要があります。

 

しかし、keybordタイプをnumpadなど[return]や[改行]のボタンがないタイプにする場合は、TextField以外の背景をタップした際にキーボードが閉じる設定にする必要があります。

 

キーボードを閉じる際は、以下のコードを利用します。

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)

 

上記のコードを、TextField以外の背景をタップした際に実行するようにZStackを使ってコーディングを行います。

 

Form内でキーボードを閉じる操作をする際の方法

通常はZStackを利用し、TextFieldの背面にキーボードを隠す処理を監視する背景を設置する方法を取りますが、Formを使うViewの場合、Sectionを使い背景に指定しているため、このSectionにタップの処理を監視させる方法にする必要があります。


以上、SwiftUIでキーボードでTextfieldを隠さない方法(Keyboard Observing)とCocoaPodsのインストール方法を紹介しました。