为啥列表的第一项显示在打开的工作表上
Posted
技术标签:
【中文标题】为啥列表的第一项显示在打开的工作表上【英文标题】:Why the first item of the list is displayed all the on the opened sheet为什么列表的第一项显示在打开的工作表上 【发布时间】:2020-03-17 15:42:32 【问题描述】:我正在将绑定变量传递给其他视图:
struct PocketlistView: View
@ObservedObject var pocket = Pocket()
@State var isSheetIsVisible = false
var body: some View
NavigationView
List
ForEach(Array(pocket.pockets.enumerated()), id: \.element.id) (index, pocketItem) in
VStack(alignment: .leading)
Text(pocketItem.name).font(.headline)
Text(pocketItem.type).font(.footnote)
.onTapGesture
self.isSheetIsVisible.toggle()
.sheet(isPresented: self.$isSheetIsVisible)
PocketDetailsView(pocketItem: self.$pocket.pockets[index])
.listStyle(GroupedListStyle())
.navigationBarTitle("Pockets")
另一种观点是:
struct PocketDetailsView: View
@Binding var pocketItem: PocketItem
var body: some View
Text("\(pocketItem.name)")
为什么我在打开第二行或第三行的工作表时看到第一项? 当我使用 NavigationLink 而不是 .sheet 时,它可以完美运行
【问题讨论】:
【参考方案1】:您一次激活所有工作表,尝试以下方法(我无法测试您的代码,但想法应该很清楚)
struct PocketlistView: View
@ObservedObject var pocket = Pocket()
@State var selectedItem: PocketItem? = nil
var body: some View
NavigationView
List
ForEach(Array(pocket.pockets.enumerated()), id: \.element.id) (index, pocketItem) in
VStack(alignment: .leading)
Text(pocketItem.name).font(.headline)
Text(pocketItem.type).font(.footnote)
.onTapGesture
self.selectedItem = pocketItem
.listStyle(GroupedListStyle())
.navigationBarTitle("Pockets")
.sheet(item: self.$selectedPocket) item in
PocketDetailsView(pocketItem:
self.$pocket.pockets[self.pocket.pockets.firstIndex(of: item)!])
【讨论】:
以上是关于为啥列表的第一项显示在打开的工作表上的主要内容,如果未能解决你的问题,请参考以下文章