繁体   English   中英

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") {
    // No tap action here
}
.simultaneousGesture(LongPressGesture().onEnded { _ in
    print("Long-pressed")
})
.simultaneousGesture(TapGesture().onEnded {
    print("Tapped")
})

我在这篇博文中了解了这一点: Supporting Both Tap and Long Press on a Button in SwiftUI

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

请检查这是否适合您:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM