なんとかするから、なんとかなる

エンジニア関係のことを書きます

TabViewで最初に開くタブをコントロールする

TabViewで最初に開くページをコントロールする

TabViewをModalで開いているのですが、経路によって最初のタブを分けたいことがありました。 少し調べても方法が見つからなかったので、まとめておきます。

結論

  1. TabViewを含むページをinitするタイミングで、Tab番号を渡す。
  2. OnAppearのタイミングでTabを変更する。
import SwiftUI

struct test: View {
    @State private var selection = 0
    let initPage: Int
    
    init(selected: Int) {
        self.initPage = selected
    }
    
    var body: some View {
        TabView(selection: $selection) {
            Text("First View").tag(0)
            Text("Second View").tag(1)
        }
        .tabViewStyle(.page)
        .onAppear(){
            self.selection = self.initPage
        }
    }
}

#Preview {
    test(selected: 0) // 親Viewでこんな感じで値を渡す
}

調べてわかったこと

InitでTab番号を指定しても、Viewが生成されていないので無視されます。 こんなコード

    @State private var selection = 0
    
    init(selected: Int) {
        self. selection = selected
    }

他にも親の要素をBindingしておく方法もあるっぽいですが。 私がBindingがまだよくわかっていません。