列表中的NavigationLink:为什么我不能两次进入同一项目?

时间:2019-12-29 17:56:00

标签: swift swiftui swiftui-list ios-navigationview swiftui-navigationlink

简单代码:

import SwiftUI

struct simpleTest_list: View {
    let items = ["one", "two", "three"]
    var body: some View {
        NavigationView{
            List{
                ForEach(items, id: \.self){item in
                    NavigationLink(
                        destination: simpleTestView(item: item)
                    ){
                        Text(item)
                    }
                }
            }
        }
    }
}

struct simpleTestView: View {
    var item: String?
    var body: some View {
        VStack{
            Text("now you at \(item ?? "unknown") View")
        }
    }
}

运行异常。我轻按“一个”,然后返回,然后再次尝试轻按“一个”,但是什么也没有发生。但是,如果我点击“两个”-很好,我可以转到另一个详细信息视图,但是不一样。

如果我将NavigationLink与init(label, tag, selection, content)一起使用,一切都会变得更糟。我仍然无法再次使用相同的局部视图,此外,首先点击另一个局部视图将立即返回。看来NavigationView将最后选择的项目保留在内存中。当我回到主视图时,应该清除它,但事实并非如此。而是在我点击另一个详细视图后将其清除。这是代码:

import SwiftUI

struct test_list: View {
    let items = ["one", "two", "three"]
    @State var selection: String?
    var body: some View {
        NavigationView{
            List{
                ForEach(items, id: \.self){item in
                    NavigationLink(
                        destination: testView(item: self.$selection),
                        tag: item,
                        selection: self.$selection
                    ){
                        Text(item)
                    }
                }
            }.navigationBarTitle(Text("selection: \(selection ?? "not selected")"))
        }
    }
}

struct testView: View {
    @Binding var item: String?
    var body: some View {
        VStack{
            Text("now you at \(item ?? "unknown") View")
        }
    }
}

我做错了什么吗(我是Swift中的新手),还是一个bug?如果是错误,是否有办法解决?

对不起,我捕获了一些GIF来显示问题所在,但我没有声望,也无法插入。当我获得10点声望时,我会更新问题。

0 个答案:

没有答案