我一直在尝试以编程方式突出显示SwiftUI Button
,但到目前为止没有成功…
我当然可以再次实现整个过程,但是我真的很想利用SwiftUI已经提供的功能。我可以想象有一个我们可以改变的环境或状态变量,但是我找不到这些变量。
这是我要实现的目标的一个小例子:
struct ContentView: View {
@State private var highlighted = false
var body: some View {
Button("My Button", action: doSomething())
.highlighted($highlighted) // <-- ??
Button("Toggle highlight") {
highlighted.toggle()
}
}
func doSomething() { ... }
}
如果在SwiftUI中无法轻松实现某些简单功能,这似乎很奇怪。有没有人找到解决方案?
答案 0 :(得分:0)
这是一个基于自定义ButtonStyle
的可行方法的演示。经过Xcode 11.4 / iOS 13.4的测试
struct HighlightButtonStyle: ButtonStyle {
let highlighted: Bool
func makeBody(configuration: Configuration) -> some View {
configuration.label
.background(highlighted || configuration.isPressed ? Color.yellow : Color.clear)
}
}
extension Button {
func highlighted(_ flag: Bool) -> some View {
self.buttonStyle(HighlightButtonStyle(highlighted: flag))
}
}
struct ContentView: View {
@State private var highlighted = false
var body: some View {
VStack {
Button("My Button", action: doSomething)
.highlighted(highlighted)
Divider()
Button("Toggle highlight") {
self.highlighted.toggle()
}
}
}
func doSomething() { }
}