简单代码:
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点声望时,我会更新问题。