SwiftUI на самом деле предоставляет API для этого: ButtonStyle
.
struct MyButtonStyle : ButtonStyle {
func body(configuration: Button<Self.Label>, isPressed: Bool) -> some View {
configuration
.overlay(configuration) // Works around SwiftUI automatically changing opacity.
.padding()
.foregroundColor(.white)
.background(isPressed ? Color.red : Color.blue)
.cornerRadius(8.0)
}
}
extension StaticMember where Base: ButtonStyle {
static var myStyle: StaticMember<MyButtonStyle> {
return .init(MyButtonStyle())
}
}
// to use it
Button(action: {}) {
Text("Hello World")
}
.buttonStyle(.myStyle)
Как я заметил в комментарии после .overlay(...)
, в настоящее время (бета-версия 3) SwiftUI всегда изменяетсяНепрозрачность содержимого кнопки автоматически.Я оставил отзыв об этом, поскольку кажется, что использование пользовательского стиля кнопки должно полностью перекрывать такое поведение.Для меня это похоже на ошибку.