SwiftUI 中的双重操作按钮(点击和长按)

Button with double action (tap & long press) in SwiftUI

是否可以在 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 {
  ....
}

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

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

请检查这是否适合您:

Button("Button") {
    print("tapped")
}
.simultaneousGesture(LongPressGesture().onEnded { _ in
    print("long pressed")
})

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

这是另一个不会在每次长按后触发常规点击操作的解决方案。

Button("Button") {
    // No tap action here
}
.simultaneousGesture(LongPressGesture().onEnded { _ in
    print("Long-pressed")
})
.simultaneousGesture(TapGesture().onEnded {
    print("Tapped")
})

我在这个博客中了解了这个 post:Supporting Both Tap and Long Press on a Button in SwiftUI

注意:对于 Catalyst 这可能无法按预期工作,您可以在上面的博客 post 中了解更多信息。