SwiftUI - 如何检测长按按钮?

ala*_*dey 3 watchos swiftui

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

Button(action: {
              // some processes

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

            }
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 9

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

Button("Demo") {
    print("> tap")
}
.simultaneousGesture(LongPressGesture().onEnded { _ in
    print(">> long press")
})
Run Code Online (Sandbox Code Playgroud)

  • 这是我见过的最好的解决方案。但是,请注意,释放按钮后仍会触发按钮按下操作。在我的用例中,这并不重要。 (2认同)
  • 这是一个很好的解决方案,但它如何在我的滚动视图中禁用滚动 (2认同)

And*_*can 5

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

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 }
    )
  }
}
Run Code Online (Sandbox Code Playgroud)