【findNavigator】TextEditorビューに検索インタフェースを付与する

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

findNavigatorは、TextEditorビューと組み合わせて使うモディファイアで、TextEditorに検索インタフェースを付与することができます。

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

findNavigatorを使うと何が出来る?

findNavigatorを使うとTextEditorに入力されている文字列を対象として、検索することができます。

findNavigatorのインタフェースに文字列を入力すると、TextEditor内に同じ文字列があった場合、ハイライトで表示してくれたり、見つかった文字列の数を表示してくれます。

基本的な使い方

サンプルコード

以下にサンプルコードを示します。

サンプルコードの説明

このコードでは、TextEditorにfindNavigatorを付与しています。その下にボタンを設置して、タップするごとに検索インタフェースの表示/非表示を切り替えます。

import SwiftUI

struct FindNavigationSmp: View {
    @State var text = "ABBCCCDDDDEEEEEFFFFFFF"
    @State var isPresented = false
    
    var body: some View {
            TextEditor(text: $text)
                .frame(height: 150)
                .border(.gray, width: 1)
                .padding()
                .findNavigator(isPresented: $isPresented)
        
            Button(action: {
                isPresented.toggle()
            }) {
                Label("Find", systemImage: "magnifyingglass")
            }
    }
}

サンプルコードの動作

Findボタンをタップすると、画面下側に検索インタフェースが表示されます。
ここに文字列を入力するとTextEditorビュー内に一致する文字列をハイライト表示します。

検索インタフェースを無効にする【findDisabled】

findNavigatorには関連するモディファイアがあり、findDisabledもその一つです。

findDisabledは、findNavigatorによる検索機能を無効にする機能です。
一見使用する必要がない機能にも思えますが、プログラム制御により検索インタフェースの有効/無効を切り替えたりなどで活用することができます。

サンプルコード

先ほどのサンプルコードにfindDisabledモディファイアを加えています。

import SwiftUI

struct FindNavigationSmp: View {
    @State var text = "ABBCCCDDDDEEEEEFFFFFFF"
    @State var isPresented = false
    @State var isDisabled = false
    
    var body: some View {
        TextEditor(text: $text)
            .frame(height: 150)
            .border(.gray, width: 1)
            .padding()
            .findDisabled(isDisabled)
            .findNavigator(isPresented: $isPresented)
    
        Button(action: {
            isPresented.toggle()
        }) {
            Label("Find", systemImage: "magnifyingglass")
        }
        
        Toggle(isOn: $isDisabled) {
            Text(isDisabled ? "検索無効" : "検索有効")
        }.padding()
    }
}

サンプルコードの動作

以下のように検索有効/検索無効のトグルスイッチを設置しました。

検索有効の時は、findNavigatorによる検索が可能ですが、無効にするとfindNavigatorが動作しなくなります。

注意点

findDisabledとfindNavigatorの記述順番により、動作が変わりますので注意してください。
上記のサンプルプログラムの場合、順番を逆にすると、findDisabledが機能しなくなります。

置換インタフェースを無効にする【replaceDisabled】

findDisabledと同様で置換機能を無効にする機能があります。replaceDisabledを使います。
使い方はfindDisabledと同様です、

まとめ

findNavigatorを使用することで、SwiftUIアプリケーションのTextEditorビューで簡単に検索機能を追加することができます。
ユーザーがアプリケーション内でテキストを検索できるようにするためには、この機能を利用すると便利です。具体的な要件に応じて、isPresentedの値を制御するロジックを追加するとよいでしょう。

これらの基本的な使い方を参考に、自分のアプリケーションに適した検索機能を実装してみてください。

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