Невозможно перейти к корневому представлению после нажатия NavigationLink в строке списка

Я новичок в SwiftUI, и я изо всех сил пытаюсь успешно перейти к корневому контроллеру при нажатии на NavigationLink в строке списка. Я следую подходу, продемонстрированному в этом другом сообщении. Я могу заставить эту реализацию работать в другом месте моего проекта, но это немного сложно, когда задействован список.

Настройка такова: ListView содержит список и RowView. При нажатии на ссылку NavigationLink в RowView происходит переход к просмотру 2. При нажатии на ссылку NavigationLink происходит переход X раз, если в списке есть X строк. Я предполагаю, что, щелкнув ссылку NavigationLink, я переключаю ее логическое значение привязки на true, и в результате активируются все ссылки NavigationLink.

 struct RowView : View {
    
    @Binding var rootIsActive : Bool
    var body: some View {
        VStack() {
            let view2 = View2(shouldPopToRootView: $rootIsActive)
            HStack() {
                NavigationLink(destination: view2, isActive: $rootIsActive, label: {Text("Go to view 2")}).isDetailLink(false)
                    .background(Color.purple)
                // Additional UI stuff
            }
            .frame(height:50)
        }
    }
}

 struct ListView: View {

    @State var isActive : Bool = false
    var someItems: [SomeObj] = []

    var body: some View {
        NavigationView {
            VStack() {
                // Other UI stuff
                List {
                    ForEach(self.someItems) { item in
                        Section(header: RowView(rootIsActive: $isActive).onTapGesture {
                            // debug code
                        })
                    }
                }
            }
        }
    }
}

struct View2: View {
        
    @Binding var shouldPopToRootView : Bool
    
    var body: some View {
        ZStack() {
            //UI Stuff
        }
        .navigationBarItems(trailing: Button(action: {
            // Pop to root
            self.shouldPopToRootView = false
        }, label: {
            Text("Save")
        }))
    }
}

person Brosef    schedule 04.01.2021    source источник
comment
Вы привязываете все строки к одному состоянию, поэтому они активируются сразу. Вместо этого вам нужно использовать NavigationLink с тегом, как в stackoverflow.com/questions/64051976/ или stackoverflow.com/questions/61705302/.   -  person Asperi    schedule 04.01.2021
comment
@Asperi облом, так что вам придется использовать объект среды?   -  person Brosef    schedule 05.01.2021