SwiftUI 中具有双重动作(点击和长按)的按钮

Posted

技术标签:

【中文标题】SwiftUI 中具有双重动作(点击和长按)的按钮【英文标题】:Button with double action (tap & long press) in SwiftUI 【发布时间】:2020-07-09 03:29:16 【问题描述】:

是否可以在 SwiftUI 中设置一个按钮,点击时执行操作,长按时执行不同的操作?

我试过这个:

Button(action: 
    self.handleButtonTap()
)

    Text("My nice button")
        .foregroundColor(.primary)

.onLongPressGesture 
    print("Long pressed!")

或代替:

.onLongPressGesture 
    print("Long pressed!")

使用这个:

.gesture(longPress)

长按类似于:

var longPress: some Gesture 
  ....

但似乎没有任何效果。 充其量我已经能够将长按手势附加到按钮的文本上,但即使在这种情况下,正常的点击也会停止工作。

我们将不胜感激任何好的建议。

【问题讨论】:

【参考方案1】:

请检查这是否适合您:

Button("Button") 
    print("tapped")

.simultaneousGesture(LongPressGesture().onEnded  _ in
    print("long pressed")
)

请注意,在上述代码中,每次长按后都会执行点击操作。你可以用一个简单的 Bool 来处理这个问题。

【讨论】:

是的,它有效。正如你提到的,它可以用布尔值来处理。 更多细节,在某些情况下;不需要布尔工作,因为主要操作没有被调用。就像你在长按动作中调出另一个视图一样。

以上是关于SwiftUI 中具有双重动作(点击和长按)的按钮的主要内容,如果未能解决你的问题,请参考以下文章

具有单按和长按事件的 UIButton 快速

收到长按/点击android中的线性布局?

如何在gridview android上处理事件点击和长按?

8051识别按键单击双击和长按

使用 touch.tapCount 确定按钮上的长按

iOS 15.3.1中SwiftUI toolbar中按钮不响应点击动作等若干不兼容问题的解决