小编Jos*_*tos的帖子

如何在 SwiftUI 中检测按下按钮并采取行动

我想在开始按下按钮时执行一个操作,然后在停止按下按钮时执行一个操作。我一直在寻找一个简单的解决方案,但遇到了更复杂的配置。我从BlueSpud获得的一个选项非常简单且接近。按钮操作未使用,所以我尝试:

    struct MyView: View {
    @State private var pressing = false

    var body: some View {

        Text("Button")
            .background(self.pressing ? Color.red : Color.blue)
            .gesture(DragGesture(minimumDistance: 0.0)
                .onChanged { _ in
                    self.pressing = true
                    print("Pressing started and/or ongoing")
            }
            .onEnded { _ in
                self.pressing = false
                print("Pressing ended")
            })
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码的问题在于,如果您在按下时将手指拖出按钮区域,则 .onEnded 永远不会被调用,并且如果没有可靠的事件结束,该解决方案将不起作用。

我还尝试过 Apple 的编写 SwiftUI 手势的示例。它提供了对按下和未按下状态的非常一致的控制,但我似乎不知道在哪里插入我的动作:

struct PressedButton: View {

    var startAction: ()->Void
    var endAction: ()->Void

    enum DragState {
        case inactive
        case pressing
        case dragging(translation: CGSize) …
Run Code Online (Sandbox Code Playgroud)

button ios swiftui

5
推荐指数
2
解决办法
7393
查看次数

标签 统计

button ×1

ios ×1

swiftui ×1