为什么ObservedObject
更新时我的视图又回到父视图?我了解对它的更新会重绘视图(可能还重绘了ParentView
),但坦率地说,我正在查看ChildView
的atm我不在乎ParentView
的外观
如果显示的内容直接来自ParentView
,但与某个类相关联,我会理解这种行为。这是苹果的故意行为吗?
我应该如何在NavigationLink
调用的视图中处理数据而不弹出视图?
为什么这个流行音乐被强迫? 有办法“阻止它”吗?
我已经尝试过这样的事情:
SwiftUI: @ObservedObject redraws every view,但没有帮助。当我tap
删除项目时,情况变得更加糟糕。
我有这样的代码构造:
父视图:
struct ContentView: View {
@ObservedObject var data = Data()
var body: some View {
NavigationView {
VStack() {
ForEach(self.data.myArray, id: \.self) { subArray in
NavigationLink(destination: Child(data: self.data, mySubArray: subArray)) {
Text(subArray[0]).padding().background(Color.yellow)
}
}
}
}
}
}
孩子:
struct Child: View {
@ObservedObject var data: Data
var mySubArray: Array<String>
var body: some View {
ForEach(self.mySubArray, id: \.self) { str in
Text(str).padding().background(Color.yellow)
.onTapGesture {
self.data.removeFromSubArray(index: self.data.myArray.firstIndex(of: self.mySubArray) ?? 0, remove: str)
}
}
}
}
还有一个ObservableObject:
class Data: ObservableObject {
@Published var myArray: Array<Array<String>> = []
init() {
self.myArray.append(["A", "B", "C"])
self.myArray.append(["D", "E", "F"])
self.myArray.append(["G", "H", "I"])
}
func removeFromSubArray(index: Int, remove: String) {
if self.myArray.count-1 >= index {
if let subIndex = self.myArray[index].firstIndex(of: remove) {
self.myArray[index].remove(at: subIndex)
}
}
}
}