以编程方式突出显示 SwiftUI 按钮
Posted
技术标签:
【中文标题】以编程方式突出显示 SwiftUI 按钮【英文标题】:Highlight SwiftUI Button programmatically 【发布时间】:2020-08-13 10:40:03 【问题描述】:我一直在尝试以编程方式突出显示 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 中实现如此简单的事情似乎很奇怪。有人找到解决方案了吗?
【问题讨论】:
您能否为您的代码提供您希望在何处/如何(在何种条件下)突出显示 按钮? highlight 是什么意思 - 颜色、边框、文本......以及何时/如何取消突出显示?因为目标有点模糊。 当然,让我编辑问题。关于我所说的 highlight 的意思,它实际上是 SwiftUI 所做的一切:背景颜色、颜色……取决于上下文。 如果你的意思是让按钮执行默认高亮,那么现在在 SwiftUI 中是不可能的。如果您的意思是自定义突出显示,那么您需要ButtonStyle,例如***.com/questions/62678306/…,解决方法是相同的。 感谢@Asperi,我仍然无法相信即使在 ios 14 中也无法访问配置的isPressed
属性。这是我期望从任何 UI 框架中获得的基本行为!
【参考方案1】:
这是基于自定义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()
【讨论】:
谢谢!这更像是一种解决方法,因为我们覆盖了 SwiftUI 提供的默认行为。我会尝试进一步研究。以上是关于以编程方式突出显示 SwiftUI 按钮的主要内容,如果未能解决你的问题,请参考以下文章
Android:以编程方式突出显示listview中的当前选定选项