以编程方式突出显示SwiftUI按钮

时间:2020-08-13 10:40:03

标签: swiftui

我一直在尝试以编程方式突出显示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中无法轻松实现某些简单功能,这似乎很奇怪。有没有人找到解决方案?

1 个答案:

答案 0 :(得分:0)

这是一个基于自定义ButtonStyle的可行方法的演示。经过Xcode 11.4 / iOS 13.4的测试

demo

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() { }
}
相关问题