swift - SwiftUI 中的可重写 ButtonStyle

标签 swift swiftui

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

例如,在 iOS 上,DefaultButtonStyle 默认将文本着色为蓝色,但您可以通过指定 foregroundColor 修饰符来覆盖它。同样,PlainButtonStyle 默认情况下将文本着色为黑色,但也可以覆盖:

example of overriding foreground color in button styles

很明显,可以创建可覆盖的按钮样式。但是,如果我只是创建一个像这样设置前景色的,它是不可覆盖的:

public struct CustomButtonStyle: ButtonStyle {
    public func makeBody(configuration: Self.Configuration) -> some View
    {
        configuration.label
            .foregroundColor(Color.blue)
    }
}

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

如何制作提供默认前景色但也可覆盖的 ButtonStyle

提前致谢!

最佳答案

你可以这样实现:

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)
    }
}

关于swift - SwiftUI 中的可重写 ButtonStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58333460/

相关文章:

ios - SwiftUI 中的动态过滤器(谓词)

swift - 将图像保持在不同 View 的同一位置

ios - 在 SwiftUI 中按下按钮时如何检测并采取措施

swift - WatchOS 2 文本/表格上基于页面的点

swift - 在 PFQueryTableViewController 中按 object.count 排序

ios - 更早捕获/防护 [SCNSpriteKitEventHandler TouchsCancelled :withEvent:]? 崩溃

SwiftUI RoundedRectangle 在底部被切除

ios - Swift - 如何将 viewForAnnotation 用于简单的圆角图像?

ios - 在另一个 View Controller 中更改对象的属性

swift - XCode + Swift : Thread 1: EXC_BAD_ACCESS (code=2, 地址=0x7ffee99cdfd8)