【发布时间】:2021-05-23 04:18:15
【问题描述】:
我发现了一种符合我口味的 popover 奇怪行为。我希望它显示带有PopoverItem 和number 的视图,两者都将从onTapGesture 中的ForEach 设置。问题是弹出框总是在第一次点击时显示默认的number,它对每个其他都按预期工作。
错误(左)和正确的行为(第二次点击按预期工作)。在 iOS 上相同,与 Button 相同
我能够使其与 Binding 一起工作,但我想找到一个更好的解决方案来呈现弹出框,并找出它为什么不能按我预期的那样工作。
我的主视图如下所示:
struct PopoverTest: View {
let array: [PopoverItem] = [PopoverItem("First title"), PopoverItem("second title"), PopoverItem("third title")]
@State var show: PopoverItem? = nil
@State var number: Int = 0
var body: some View {
VStack {
ForEach(Array(array.enumerated()), id: \.element.id) { number, item in
MyPopover(number: number + 1, item: item)
.onTapGesture {
self.number = number + 1
self.show = item
}
}
}
.popover(item: $show) { item in
MyPopover(number: number, item: item)
}
}
}
以及弹出框和项目:
struct MyPopover: View {
let number: Int
let item: PopoverItem
var body: some View {
HStack {
Text("\(number)")
Text(item.text)
}.padding()
}
}
struct PopoverItem: Identifiable {
let id = UUID()
let text: String
init(_ text: String) { self.text = text }
}
【问题讨论】: