0

以下の例では3rd View、TabView からに移動し、Button to present シートをクリックすると、シートは表示されますが3rd View、ポップされます。TabView 本体が再呼び出しされる理由がわかりません。私は次のことを試しました:

  1. 別の State プロパティを用意して、Navigation Link にバインドします。
  2. StateObject を作成し、その中にプロパティを配置して、ナビゲーション リンクにバインドします。
  3. isActive パラメータを使用せずにナビゲーション リンクを直接設定します。
struct TestView: View {

    @State var selectedTab: TabType = .home

    var body: some View {
        NavigationView {
            TabView(selection: $selectedTab) {
                ForEach(TabType.allCases, id: \.self) { tabType in
                    switch tabType {
                    case .profile:
                        ThirdView()
                            .navigationBarHidden(selectedTab == .profile)
                            .tag(tabType)
                            .tabItem {
                                Label(tabType.title, systemImage: "plus")
                            }
                    default:
                        SecondView()
                            .tag(tabType)
                            .tabItem {
                                Label(tabType.title, systemImage: "star")
                            }
                    }
                }
            }
        }
    }}

struct SecondView: View {
    var body: some View {
        VStack {
            Spacer()
            Text("2nd view")
            NavigationLink("3rd view", destination: ThirdView())
            Spacer()
        }
            .background(Color.green)
    }
}

struct ThirdView: View {

    @State var presentSheet = false

    var body: some View {
        ZStack {
            Color.gray
            VStack {
                Text("3rd view")
                Spacer()
                Button("Button") {
                    presentSheet = true
                }
                    .padding()
            }
        }
            .sheet(isPresented: $presentSheet) {
                VStack {
                    Spacer()
                    Text("This is sheet")
                    Spacer()
                }
            }
    }
}

enum TabType: CaseIterable {

    case home
    case discover
    case profile
    case more

    var image: Image {
        switch self {
        case .home:
            return Image(systemName: "plus")
        case .discover:
            return Image(systemName: "plus")
        case .profile:
            return Image(systemName: "plus")
        case .more:
            return Image(systemName: "plus")
        }
    }

    var title: LocalizedStringKey {
        switch self {
        case .home:
            return LocalizedStringKey("home")
        case .discover:
            return LocalizedStringKey("Discover")
        case .profile:
            return LocalizedStringKey("Me")
        case .more:
            return LocalizedStringKey("Shop")
        }
    }
}
4

0 に答える 0