SwiftUI:如何在用户完成长按后以编程方式取消选择按钮?

SwiftUI: How can I deselect a button programmatically after the user completes a long press?

我有一个按钮,可以长按执行不同的操作。这就是问题所在:如果我在长按后松开按钮,同时仍然悬停在按钮上,点击动作仍然会触发。有没有一种方法可以在我的长按操作运行后自动 untap/deselect 按钮?谢谢

Button("Long Press Test") {
            print("Button Tapped")
        }
        .simultaneousGesture(LongPressGesture().onEnded { _ in
            print("Long Press Successful")
        })

您只需要将按钮操作块设为空即可。现在你只会得到长按动作。

Button(action: {})
{
    Text("Long Press Test")
}
.simultaneousGesture(
    LongPressGesture()
        .onEnded { _ in
            print("Long Press Successful")
        }
)

您的点击操作需要有条件。 LongPressGesture 总是会首先触发,因为它对媒体有反应。 Tap 向左反应,所以在按下之后。在 LongPressGesture 中,您设置了一个标志,使操作在 Tap 中跳过,然后在条件后的 tap 中重置该标志。一个例子:

struct ButtonTapOrPress: View {
    
    @State var longpPress = false
    
    var body: some View {
        Button("Long Press Test") {
            if !longpPress {
                    print("Button Tapped")
            }
            longpPress = false
                }
                .simultaneousGesture(LongPressGesture().onEnded { _ in
                    print("Long Press Successful")
                    longpPress = true
                })
    }
}