【问题标题】:SwiftUI - how to detect long press on Button?SwiftUI - 如何检测按钮上的长按?
【发布时间】:2020-02-29 11:01:47
【问题描述】:

我有一个按钮,当它被按下时,它会执行一些操作。但我想修改同一个 Button 以检测更长的按下,并执行一组不同的过程。如何修改此代码以检测长按?

Button(action: {
              // some processes

            }) {
              Image(systemName: "circle")
                .font(.headline)
                .opacity(0.4)

            }

【问题讨论】:

    标签: swiftui watchos


    【解决方案1】:

    这是可能的变体(使用 Xcode 11.2 / iSO 13.2 测试)。

    Button("Demo") {
        print("> tap")
    }
    .simultaneousGesture(LongPressGesture().onEnded { _ in
        print(">> long press")
    })
    

    【讨论】:

    • 这是我见过的最好的解决方案。但是,请注意,按钮按下操作仍会在释放按钮时触发。在我的用例中,这无关紧要。
    • 我喜欢这个解决方案,但是它仍然会触发按钮点击。有没有办法专门检测按钮的点击或长按?在这种情况下,它应该能够识别点击前的长按。
    【解决方案2】:

    丹尼尔伍德的评论在这两个陈述中都是正确的。首先,它是最干净的解决方案。对于第二个,有一个简单的解决方法。

    struct ContentView: View {
      @State private var didLongPress = false
    
      var body: some View {
        Button("Demo") {
          if self.didLongPress {
            self.didLongPress = false
              doLongPressThing()
          } else {
              doTapThing()
          }
        }.simultaneousGesture(
          LongPressGesture().onEnded { _ in self.didLongPress = true }
        )
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多