如何使用 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 在动作关闭中获取按钮本身?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 16 修改第三方库实现监听 SwiftUI 中 sheet 弹出视图的下滑关闭动作
iOS 16 修改第三方库实现监听 SwiftUI 中 sheet 弹出视图的下滑关闭动作
iOS 16 修改第三方库实现监听 SwiftUI 中 sheet 弹出视图的下滑关闭动作