如何将我的自定义 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() 属性的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 UIView 添加到 TableViewCell

如何在 SwiftUI 中符合 ButtonStyle 协议?

SwiftUI:自定义按钮无法识别具有清晰背景和 buttonStyle 的触摸

如何在 Swift 上的单元格中添加删除按钮

如何让 .xib 出现在自定义类中

如何将我的自定义函数的输出存储在 R 中?