如何使用 SwiftUI 在动作关闭中获取按钮本身?

Posted

技术标签:

【中文标题】如何使用 SwiftUI 在动作关闭中获取按钮本身?【英文标题】:How to get button itself in action closure with SwiftUI? 【发布时间】:2020-07-07 15:12:50 【问题描述】:

是否可以使用 SwiftUI 在动作关闭中获取按钮本身?

struct ContentView: View 
    var body: some View 
        Button("test") 
            // change the color of button when user is tapping on it
        
    

【问题讨论】:

【参考方案1】:

方法如下:

struct ContentView: View 
    @State var color = Color.red
    var body: some View 
        Button("test") 
            self.color = Color.green
        .background(color)
    

【讨论】:

【参考方案2】:

如果您想访问按钮的属性,您可以创建自定义ButtonStyle

使用其configuration 设置所需的行为。

struct CustomButtonStyle: ButtonStyle 
    func makeBody(configuration: Self.Configuration) -> some View 
        configuration.label
            .frame(minWidth: 0, maxWidth: .infinity)
            .padding()
            .foregroundColor(.white)
            .background(LinearGradient(gradient: Gradient(colors: [.red, .orange]), startPoint: .leading, endPoint: .trailing))
            .cornerRadius(40)
            .scaleEffect(configuration.isPressed ? 0.9 : 1)
    

上面的例子取自这里:SwiftUI Tip: ButtonStyle and Animated Buttons

在您的情况下,您可以对其进行调整以设置自定义背景:

.background(configuration.isPressed ? Color.red : Color.blue)

【讨论】:

【参考方案3】:

是的……我也是自己想办法

struct ContentView: View 
    @State var buttonColor: Color = Color.clear
    var body: some View 
        Button(action: 
            self.buttonColor = Color(red: Double.random(in: 0...1),
                                     green: Double.random(in: 0...1),
                                     blue: Double.random(in: 0...1))
        , label: 
            Text("Button").background(buttonColor)
        )
    

【讨论】:

以上是关于如何使用 SwiftUI 在动作关闭中获取按钮本身?的主要内容,如果未能解决你的问题,请参考以下文章

在swiftui中按钮的触摸动作播放音频

iOS 16 修改第三方库实现监听 SwiftUI 中 sheet 弹出视图的下滑关闭动作

iOS 16 修改第三方库实现监听 SwiftUI 中 sheet 弹出视图的下滑关闭动作

iOS 16 修改第三方库实现监听 SwiftUI 中 sheet 弹出视图的下滑关闭动作

SwiftUI捕获键盘提交动作在iOS15之前和之后的兼容实现

Swiftui 按钮动作功能