如何将我的自定义 ButtonStyle 添加到 swiftui3 中的快捷方式 swiftui .buttonstyle() 属性
Posted
技术标签:
【中文标题】如何将我的自定义 ButtonStyle 添加到 swiftui3 中的快捷方式 swiftui .buttonstyle() 属性【英文标题】:How can I add my custom ButtonStyle to the shortcut swiftui .buttonstyle() property in swiftui3 【发布时间】:2021-06-12 15:39:40 【问题描述】:在 swiftui3 中,您可以像这样使用按钮样式的快捷方式
Button("0") print("pressed 0")
.buttonStyle(.bordered)
我想用我的自定义按钮样式类来做到这一点
struct CrazyButtonStyle:ButtonStyle
func makeBody(configuration: Configuration) -> some View
configuration.label
.foregroundColor(.red)
这样称呼它
Button("0") print("pressed 0")
.buttonStyle(.crazy)
我试过了
extension ButtonStyle
static var crazy:CrazyButtonStyle
get
return CrazyButtonStyle()
但我得到了这个错误
Contextual member reference to static property 'crazy' requires 'Self' constraint in the protocol extension
【问题讨论】:
【参考方案1】:extension ButtonStyle where Self == CrazyButtonStyle
static var crazy:CrazyButtonStyle
get
return CrazyButtonStyle()
将 Self 添加到扩展似乎有效。但我不确定这是否是最好的方法。
【讨论】:
【参考方案2】:您可以定义如下内容:
struct CrazyButtonStyle: ButtonStyle
func makeBody(configuration: Configuration) -> some View
HStack
Spacer()
configuration.label.foregroundColor(.red)
Spacer()
.scaleEffect(configuration.isPressed ? 0.90 : 1)
然后,将其应用于Button
:
Button("Crazy Button")
.buttonStyle(CrazyButtonStyle())
参考swift docs。
还有here 是其他一些例子,还有动画!
【讨论】:
有效,但这是旧的方式(swiftui2 方式)。我想知道新方法(swiftui3)你可以在哪里做.buttonStyle(.crazy)
以上是关于如何将我的自定义 ButtonStyle 添加到 swiftui3 中的快捷方式 swiftui .buttonstyle() 属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中符合 ButtonStyle 协议?