SwiftUI中的可重写ButtonStyle

时间:2019-10-11 02:27:07

标签: swift swiftui

我正在尝试创建一个自定义ButtonStyle,该自定义DefaultButtonStyle提供一些默认值,但也可以覆盖。

例如,在iOS上,foregroundColor默认将文本涂成蓝色,但是您可以通过指定PlainButtonStyle修饰符来覆盖它。同样,public struct CustomButtonStyle: ButtonStyle { public func makeBody(configuration: Self.Configuration) -> some View { configuration.label .foregroundColor(Color.blue) } } 默认将文本涂成黑色,但也可以覆盖:

example of overriding foreground color in button styles

很显然,可以创建可替代的按钮样式。但是,如果我只创建一个设置前景颜色的方法,则它是不可覆盖的:

ButtonStyle

example of not being able to override foreground color in custom button style

如何制作提供默认前景色但也可以覆盖的file.jpg

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以这样实现:

public struct CustomButtonStyle: ButtonStyle {

    let color: Color

    public init(color: Color = .accentColor) {
        self.color = color
    }

    public func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .foregroundColor(color)
    }
}