如果SwiftUI中的条件为true,如何在按钮样式之间进行切换?

问题描述 投票:1回答:1

我有2种自定义按钮样式,我想在点击按钮时更改样式。我尝试过这种方式:

Button(action: {
    self.pressed.toggle()
})
{
    Text("Button")
}.buttonStyle(pressed ? style1() : style2())

但是它不起作用,它给我它所属的VStack一个错误:

Unable to infer complex closure return type; add explicit type to disambiguate

如果我做类似的事情:

.buttonStyle(style1())

.buttonStyle(style2())

然后错误消失了,所以它不是来自style1()或style2()。

button swiftui
1个回答
0
投票

您可以创建如下所示的有用扩展程序

extension View {

    func conditionalModifier<M1: ViewModifier, M2: ViewModifier>
        (on condition: Bool, trueCase: M1, falseCase: M2) -> some View {
        Group {
            if condition {
                self.modifier(trueCase)
            } else {
                self.modifier(falseCase)
            }
        }
    }

    func conditionalModifier<M: ViewModifier>
        (on condition: Bool, trueCase: M) -> some View {
        Group {
            if condition {
                self.modifier(trueCase)
            }
        }
    }

}

用法;

@State var condition = false
var body: some View {
    Text("conditional modifier")
       .conditionalModifier(on: condition, trueCase: Style1())
       .conditionalModifier(on: condition, trueCase: Style1(), falseCase: Style2())
}
© www.soinside.com 2019 - 2024. All rights reserved.