首页 > 解决方案 > 单击按钮后立即执行 SwiftUI 按钮操作,而不是单击释放

问题描述

我想在 SwiftUI 按钮中单击/点击按钮后立即调用该操作。我该如何实施?

标签: iosbuttonswiftui

解决方案


这是一种可能的方法 - 使用自定义ButtonStyle来注入自定义触地动作

使用 Xcode 12 / iOS 14 测试

struct PressedButtonStyle: ButtonStyle {
    let touchDown: () -> ()
    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .foregroundColor(configuration.isPressed ? Color.gray : Color.blue)
            .background(configuration.isPressed ? self.handlePressed() : Color.clear)
    }

    private func handlePressed() -> Color {
        touchDown()           // << here !!
        return Color.clear
    }
}

struct DemoPressedButton: View {
    var body: some View {
        Button("Demo") {
            print(">> tap up")    // << can be empty if nothing needed
        }
        .buttonStyle(PressedButtonStyle {
            print(">> tap down")
        })
    }
}

推荐阅读