【Swift UI】画面遷移時に任意の処理を挟む方法!Navigation

この記事からわかること

  • Swift UINavigation画面遷移時に処理挟む方法
  • 画面遷移と同時アクション実行させるには?
  • インタースティシャル広告表示方法
  • simultaneousGesture使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

画面遷移時に任意の処理を挟む方法

インタースティシャル広告をアプリに導入時に画面遷移のタイミングで広告を表示させたかったのですが、NavigationLinkなどを使用する場合に画面遷移の処理は無効にせず処理を挟みたい場面に遭遇しました。

このような「画面遷移時に任意の処理を挟みたい」場合はsimultaneousGestureを使用することで解決できます。

NavigationLink {
    ChildView(item)
} label: {
    Text(item.name)
}.simultaneousGesture(TapGesture().onEnded {
    print("任意の処理を実行する")
})

あとはsimultaneousGesture内にインタースティシャルを表示する処理を入れ込めば広告を表示後に画面遷移する動作を実装することが可能です。

simultaneousGesture

公式リファレンス:simultaneousGesture

simultaneousGestureとはGestureイベント発生時に処理を実装できるモディファイアの1つです。中でもsimultaneousGestureは元となるGestureイベントで発火する処理を無効にすることなく引数に追加した処理も同時に実行することが可能です。

その他のGestureイベントについては以下の記事を参考にしてください。

navigationDestinationを使用する

「画面遷移時に任意の処理を挟む」別の方法としてnavigationDestinationを使用する方法もあります。先ほどのようにListのItemから画面遷移しない場合は以下の方法でも実装することが可能です。Itemから画面遷移する場合は挙動がおかしくなる場合があります。

struct TestNavigationView: View {
    @State    var isPresented:Bool = false
    
    var body: some View {
        NavigationStack {
            VStack {
                Button {
                    print("任意の処理")
                    isPresented = true
                } label: {
                    Text("Navigate Button")
                }
            }
            .navigationTitle("Navigation")
            .navigationDestination(isPresented: $isPresented) {
                MyNextView()
            }
        }
    }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index