LoginSignup
0
1

More than 1 year has passed since last update.

【SwiftUI】キーボードを閉じる方法(iOS15)

Last updated at Posted at 2021-11-25

SwiftUIを使ってソフトウェアキーボードを閉じる方法です。

概要

@FocusStateを使用し入力フォームのフォーカスを外す事でソフトウェアキーボードを閉じます。

コード

import SwiftUI

struct FocusStateBoolView: View {

    @State var text = ""
    @FocusState var focus:Bool

    var body: some View {
        Form {
            TextField("TextField", text: self.$text)
                .focused(self.$focus)
            Button("Focus ON"){
                self.focus = true
            }
            Button("Focus OFF"){
                self.focus = false
            }
        }
    }
}

解説

ソフトウェアキーボードを閉じるにはフォーカス(選択状態)を解除するする必要があります。
iOS15からは変数でフォーカスの状態を保持できる様になった為、
これを用いてフォーカスを外してキーボードを閉じます。

なお、標準ではreturnキーを押すか、Viewを非表示にする事でフォーカスが外れます。
思うように外す事が出来ない場合があるため、閉じる機能を提供する必要がある場合もあります。

@FocusState

フォーカスの状態を変数で保持するために、
iOS15から追加された@FocusStateを使用します。
@Stateの様にメンバ変数の前につけます。

@FocusState var focus:Bool

この時使える変数はBool又はHashableを実装したものです。
AppleのドキュメントではenumにHashableを実装して使用しています。

.focused

次にModifierの.focusedを使います。

TextField("TextField", text: self.$text)
    .focused(self.$focus)

これで変数とフォーカスの状態が紐付けられました。
この変数のtrue/falseを切り替える事でフォーカスが切り替わり、
ソフトウェアキーボードの開閉が行われます。

余談

シミュレータについて

シミュレータでソフトウェアキーボードを使う際は「shift+cmd+K」で切り替えられます。
I/Oの項目からの切り替えも出来ます。

ブログ記事の紹介

本記事は試験的にQiita用に要点を絞って簡潔にまとめて書いてみました。
ブログには細かな検証や複数の例を載せていますが、Qiita簡潔に最低限にする予定です。
好みがあると思うので使い分けて下さい。

以下のブログには詳細な説明や他のコード例があります。

ソフトウェアキーボードを閉じる方法(iOS14以前やUIの実装も含む)

@FocusStateの解説

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1