我在SwiftUI ContextMenu上遇到了一个奇怪的问题,很可能是一个错误,但是也许其他人已经找到了解决方法。我将其简化为:
struct ContentView: View {
@State var number = 20
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
Text("\(number)")
.padding()
.background(Color.green)
.contextMenu {
Button(action: {}) {
Image(systemName: "star")
Text("Test")
}
}
.onReceive(timer) { _ in
if self.number > 0 {
self.number -= 1
}
}
}
}
首次显示contextMenu时,将显示正确的数字。 但是,当第二次出现contextMenu时,它仍显示contextMenu的第一个值。
答案 0 :(得分:0)
您可以使用以下技巧使计数保持不变。
@State var number : Int = 20
@State var showNUmber : Bool = true
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
Group{
if self.showNUmber {
Text("\(self.number)").padding()
.background(Color.green)
.contextMenu{
Button(action: {
}) {
Image(systemName: "star")
Text("Test")
}
}.onLongPressGesture( pressing: { _ in
self.showNUmber = false
}, perform: {
})
}else{
Text("\(self.number)").padding()
.background(Color.green)
.contextMenu{
Button(action: {
}) {
Image(systemName: "star")
Text("Test")
}
}.onLongPressGesture( pressing: { _ in
self.showNUmber = true
}, perform: {
})
}
}.onReceive(timer) { _ in
if self.number > 0 {
self.number -= 1
}
}
}