问题描述
我有两个选项卡视图和它们的父视图。当 child1 更新我的父视图中的内容时,我希望刷新第二个孩子,这似乎不起作用。这是我的父视图代码:
import SwiftUI
struct ContentView: View {
@StateObject var collectionContainer = CollectionContainer()
@State private var trashIndex = -1
@State var items: [CustomItem] = []
@State var item: CustomItem = CustomItem(name: "",amount: -1)
var trashProxy: Binding<ContentWrapper> {
Binding<ContentWrapper>(
get: {
return self.collectionContainer.getTrash()
},set: {
self.collectionContainer.collections[trashIndex] = $0
self.items = [$0.content[0]]
self.item = $0.content[0]
})
}
var body: some View {
TabView {
ExistingItemsView(collectionContainer: collectionContainer,trashWrapper: trashProxy)
.navigationBarTitledisplayMode(.inline)
.tabItem {
Image(systemName: "tray")
Text("Items")
}
RemovedItemsView(items: self.items,item: self.item)
.navigationBarTitledisplayMode(.inline)
.tabItem {
Image(systemName: "trash")
Text("Trash")
}
}
.accentColor(.green)
.onAppear {
self.trashIndex = self.collectionContainer.getTrashIndex()
}
}
}
据我所知,trashProxy
的 setter(在 child1 aka ExistingItemView
更改 collectionContainer
之后调用;通过调试确认)更新 ContentView
的状态,从而触发刷新。这也应该刷新 RemovedItemsView
,然后在更新状态下显示 items
和 item
。不幸的是,情况并非如此,只有在 RemovedItemsView
中的 @State 更新后,通过切换分段控件才会出现更新的值。
这是我的 RemovedItemsView
代码:
import SwiftUI
struct RemovedItemsView: View {
@State private var displayStyle = 0
let styles = ["Detailed","Total"]
@State private var dummy = ""
let items: [CustomItem]
let item: CustomItem
var body: some View {
NavigationView {
vstack {
Picker(selection: $displayStyle,label: Text("")) {
ForEach(0..<styles.count) { index in
Text(self.styles[index]).tag(index)
}
}
.pickerStyle(SegmentedPickerStyle())
.padding(.trailing,90)
.padding(.leading,90)
if(displayStyle == 0)
{
SegViewOne(items: items)
}
else if (displayStyle == 1)
{
SegViewTwo(item: item)
}
}
}
}
}
struct SegViewOne : View {
let items: [CustomItem]
var body: some View {
List {
ForEach(Array(items.enumerated()),id: \.0) { i,item in
Text("\(item.name): \(item.amount)")
}
}
}
}
struct SegViewTwo : View {
let item: CustomItem
var body: some View {
Form {
if(item.amount > 0 )
{
Text("\(item.name): \(item.amount)")
}
}
}
}
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)