【dismissSearch】検索フィールドを閉じる動作をプログラムで制御するには?

この記事は約3分で読めます。

dismissSearchモディファイアは、検索フィールドを非アクティブにするための機能です。
検索フィールドがアクティブな状態で、キーボードが表示されている場合にこのモディファイアを呼び出すと、キーボードが閉じられ、検索フィールドが非アクティブになります。

  • iOS:15.0以上
  • XCode(当サイトの環境):15.0.1

dismissSearchを実行した時の効果

  • isSearchingをfalseに設定する
  • 検索フィールドからテキストをクリアする
  • 検索フィールドからフォーカスを外す

サンプルコード

以下に、dismissSearchの使用例を示します。使い方を説明するためシンプルなプログラムにしています。

import SwiftUI

struct dismissSearchSmp: View {
    @State private var searchText = ""

    var body: some View {
        dismissSearchChild()
            .searchable(text: $searchText, placement:.navigationBarDrawer(displayMode: .always), prompt: "検索文字列")
    }
}

struct dismissSearchChild: View {
    @Environment(\.dismissSearch) private var dismissSearch

    var body: some View {
        NavigationStack {
            List {
                ForEach(0..<100) { index in
                    Text("Item \(index)")
                }
            }
            .navigationTitle("Searchable List")
            
            Button("検索を閉じる") {
                dismissSearch()
            }
        }
    }
}

この例では、dismissSearch関数を使用して、検索フィールドを非アクティブにするためのボタンを追加しています。
ボタンをタップすると、dismissSearchが呼び出され、検索フィールドが非アクティブになります。
これにより、キーボードが閉じられ、検索フィールドがフォーカスを失います。

まとめ

dismissSearchを使用することで、ユーザーが検索フィールドを閉じるための操作を提供することができます。

ただし、本機能は、searchableモディファイアにより実装した検索フィールドでは、デフォルトでcancelボタンが表示されるため必須の機能ではないでしょう。

実際の使いどころ

実際の使い所は、プログラムで検索フィールドを制御できるため、リストにデータを追加した際に検索フィールドを同時に閉じる動作を実装する場合などが考えられます。

タイトルとURLをコピーしました