我有这样的东西:
import SwiftUI
struct Overview: View {
@ObservedObject var firstArray = FirstArray()
var body: some View {
Group{
ScrollView(){
ForEach(self.firstArray.array, id: \.self){ array in
SubView(array: array)
}
Spacer()
}
}.navigationBarTitle("Overview")
}
}
struct SubView: View {
@State var array
var body: some View {
NavigationLink(destination: DetailInfo(array: array){
Image(systemName: "pencil.circle").resizable().frame(width: 30, height: 30)
}
}.navigationBarTitle("SubView")
}
struct DetailInfo: View {
@State var array
var body: some View {
List(){
ForEach(0..<self. array.count, id: \.self){item in
Text(item)
}.onDelete(perform: deleteItem)
}
}
func deleteItem(at offsets: IndexSet) {
self.array.remove(atOffsets: offsets)
}
}
当我删除DetailInfo
中的项目时,它将弹出我回到Overview
。这是为什么?是因为Overview
中的ForEach“刷新”。我如何留在DetailInfo
上?在id: \.self
中遗漏Overview
时,不会显示此行为。
答案 0 :(得分:1)
是的,这是因为所有内容都会刷新,因此详细视图和导航链接将不再存在,因此应用程序“跳转”回了根视图
“常规”解决方案是:不要在详细信息视图中删除项目,而是在列表中-那么就没有问题,而且SwiftUI也免费提供了不错的动画