要在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上为这个问题提供有用的答案。
在提议结束之前请重新考虑。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。