开发者社区> 问答> 正文

SwiftUI ButtonStyle-如何检查按钮是否已禁用或启用?

要在SwiftUI中设置按钮的样式,根据我的理解,您可以扩展ButtonStyle
和实施

func makeBody
(configuration: Self.Configuration) -> some View```  
在其中,您开始将修改应用到configuration.label,它是对```
Button```  
视野。

现在,除了label场,ButtonStyle.Configuration有一个布尔字段isPressed但似乎仅此而已。

如何检查该按钮是否已启用或禁用?

例如,我希望在按钮周围绘制一个边框,如果启用了该按钮,则希望边框为蓝色,如果禁用,则希望边框为灰色。

我最初的猜测是这样的:

    func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .overlay(
                RoundedRectangle(cornerRadius: 4).stroke(configuration.isEnabled ? Color.blue : Color.gray, lineWidth: 1).padding(8)
            )
    }
但没有```
isEnabled
场```  
。

苹果供应```
PlainButtonStyle```  
显然可以访问这些信息,因为头文件中的doc注释声明“样式可以应用可视效果来指示按钮的按下、聚焦或启用状态”。

/// A Button style that does not style or decorate its content while idle. /// /// The style may apply a visual effect to indicate the pressed, focused, /// or enabled state of the button. @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) public struct PlainButtonStyle : PrimitiveButtonStyle { .....

有办法获取这些信息吗?

编辑:

在建议结束这个问题之前,请阅读以下内容:

不久前也有一个类似的问题。这个问题没有具体说明任何情况。

这里我有一个特定的上下文:创建一个通用的可重用按钮样式。

如果有这样的答案是不够的。我不能期望人们将禁用状态传递给样式构造函数。太重复了。

如果人们不得不这样写代码,你能想象吗:

Button() { .... }.disabled(someExprssion).buttonStyle(MyCustomStyle(disabled: someExpression))


显然这是不可取的。

而且,很明显,Apple提供的样式可以访问信息,而不需要用户将禁用状态再次传递给样式。

如果您关闭这个问题,您将永远阻止任何人在StackOverflow上为这个问题提供有用的答案。

在提议结束之前请重新考虑。

展开
收起
游客5akardh5cojhg 2019-12-04 16:53:06 1070 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载