0

我是新手

我的 xcode 版本是 11.2.1,swift 是 5.1.2


当我在 MasterView 中使用 NavigationView 时,我有两个 DetailViews

我想在第一个DetailView关闭时自动进入第二个DetailView


这是我的方法,但失败了。

每当我进入第二个DetailView,

它会立即自动返回到 MasterView

https://i.stack.imgur.com/9voJA.gif

这是我的代码

struct MasterView: View {
    @State var tag: Int? = nil
    var body: some View {
        NavigationView{
            VStack{
                NavigationLink(destination: DetailView1(tag: self.$tag), tag: 1, selection: self.$tag) {
                    EmptyView()
                }
                NavigationLink(destination: DetailView2(tag: self.$tag), tag: 2, selection: self.$tag) {
                    EmptyView()
                }

                Button(action: {
                    self.tag = 1
                }) {
                    Text("press here to enter DetailView1")
                }
            }
        }

    }
}

struct DetailView1: View {
    @Binding var tag: Int?
    var body: some View {

        VStack{
            Text("DetailView 1")
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading:
            Button(action: {
                self.tag = 2
            }) {
                HStack {
                    Image(systemName: "arrow.left.circle")
                    Text("Go Back")
                }
        })
    }
}

struct DetailView2: View {
    @Binding var tag: Int?
    var body: some View {

        VStack{
            Text("DetailView 2 2 2 2 2 2 2")
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading:
            Button(action: {
                self.tag = nil  // never execute
            }) {
                HStack {
                    Image(systemName: "arrow.left.circle")
                    Text("Go Back")
                }
        })
    }
}

我发现当第一个 DetailView 关闭时,“tag”变量将自动设置为“nil”

但我不知道为什么

请帮助我,谢谢

对不起我的英语很差

4

1 回答 1

0

试试下面的代码。(请在真机上测试)

主视图

struct MasterView: View {
    @State var tag1: Int? = nil
    @State var tag2: Int? = nil
    var body: some View {
        NavigationView{
            VStack{
                NavigationLink(destination: DetailView1(tag: self.$tag2), tag: 1, selection: self.$tag1) {
                    EmptyView()
                }
                NavigationLink(destination: DetailView2(tag: self.$tag2), tag: 2, selection: self.$tag2) {
                    EmptyView()
                }
                Button(action: {
                    self.tag1 = 1
                }) {
                    Text("press here to enter DetailView1")
                }
            }
        }
    }
}

细节视图1

struct DetailView1: View {
    @Binding var tag: Int?
    @Environment(\.presentationMode) var presentation
    var body: some View {
        VStack{
            Text("DetailView -> 1")
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading:
            Button(action: {
                self.tag = 2
                self.presentation.wrappedValue.dismiss()
            }) {
            HStack {
                 Image(systemName: "arrow.left.circle")
                 Text("Go Back")
            }
        })
    }
}

细节视图2

struct DetailView2: View {
    @Binding var tag: Int?
    @Environment(\.presentationMode) var presentation
    var body: some View {
        VStack{
            Text("DetailView -> 2")
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading:
            Button(action: {
                self.tag = nil 
                self.presentation.wrappedValue.dismiss()
            }) {
            HStack {
                Image(systemName: "arrow.left.circle")
                Text("Go Back")
            }
        })
    }
}
于 2019-12-03T05:27:39.383 回答