SwiftUI ObservedObject使视图在更新时弹出

时间:2020-07-26 17:10:29

标签: swift swiftui

为什么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)
            }
        }
    }
}

0 个答案:

没有答案