【问题标题】:SwiftUI contextMenu shows previous valueSwiftUI contextMenu 显示以前的值
【发布时间】:2019-12-31 01:39:23
【问题描述】:

我在使用 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的第一个值。

https://imgur.com/8sj4Agf

【问题讨论】:

    标签: swift contextmenu swiftui


    【解决方案1】:

    您可以使用以下技巧使计数保持不变。

            @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
            }
        }
    
       }
    

    【讨论】:

    • 谢谢!这在这种情况下非常有效。问题是在我的代码中我也有一个 onTapGesture 并且使用这种解决方法 onTapGesture 不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多