更改布尔值时无法在 SwiftUI 中更改按钮文本

Posted

技术标签:

【中文标题】更改布尔值时无法在 SwiftUI 中更改按钮文本【英文标题】:Unable to get button text to change in SwiftUI when changing boolean value 【发布时间】:2019-09-09 14:38:59 【问题描述】:

我想要一个按钮,单击该按钮会切换布尔值并更改按钮的文本。通过使用打印语句,我可以确认按钮正确切换布尔值,但它没有更改按钮的文本。

我已尝试手动将 bool 默认值设置为 false,这确实会更改文本,但在切换时我仍然无法更改。

Button(action: 
                Variables.userTriangle.cupShooting = 7
                Variables.userTriangle.triangle[6].toggleStatus()
            ) 
                if !Variables.userTriangle.triangle[6].status 
                    Text("x")
                        .font(.largeTitle)
                 else 
                    Text("7")
                        .font(.largeTitle)
                
            

当它点击按钮时,我希望它通过更改布尔值来更改文本的值。我计划拥有多个这样的按钮。

【问题讨论】:

【参考方案1】:

我相信视图只构建一次,因此它不会在每次更改时检查 if 条件...

您可以做的是让您的文本成为@State var,然后当您更改它时,它会自动在视图中更新。

@State var someText = "x"

...

Button(action: 
                Variables.userTriangle.cupShooting = 7
                Variables.userTriangle.triangle[6].toggleStatus()
                if (Variables.userTriangle.triangle[6].status) 
                   self.someText = "7"
                 else 
                   self.someText = "x"
                
            ) 
                Text(self.someText).font(.largeTitle)

            

【讨论】:

谢谢。我能够使用该方法使其工作。但是,我计划让多个按钮具有这种行为,每个按钮都有不同的文本(~20),除了为每个按钮创建变量之外,还有更有效的方法来做到这一点。 @ThomasBraun 很高兴它起作用了,不幸的是,我还没有玩过 SwiftUI,还不知道更好的方法来做你需要的事情。【参考方案2】:

更简单的方法是:

Button(action: 
            Variables.userTriangle.cupShooting = 7
            Variables.userTriangle.triangle[6].toggleStatus()
        ) 
            Text(Variables.userTriangle.triangle[6].status ? "7" : "x")
        

【讨论】:

对不起,我是 Xcode/SwiftUI 的新手。该格式是否与 ?和:基本上让它根据布尔值做两件不同的事情? @ThomasBraun 它是一个三元运算符,用于多种语言 - 如果为真则执行第一件事,如果为假则执行 : 之后的操作 只是想让您知道我尝试了该方法但没有成功。我认为这是因为 Quinn 在他的回复中所说的,但 SwiftUI 只构建了一次,因此它不会重新检查 if 条件的状态。仍然感谢教我三元运算符 在 SwiftUI 中声明的视图会在每次标记为 State、Binding 或 ObservedObject 的变量值发生变化时重绘。为了提高效率,只有外观取决于这些变量的元素才会被重绘。我假设的问题在于您的数组的声明方式。

以上是关于更改布尔值时无法在 SwiftUI 中更改按钮文本的主要内容,如果未能解决你的问题,请参考以下文章

当我们在文本和图像之间切换按钮内容时,如何停止 SwiftUI 更改固定填充?

根据 SwiftUI 中的切换值更改文本

在 SwiftUI 中按下按钮时更改字符串的文本

在 SwiftUI 中动态更改动画的持续时间

使用 Combine 和 SwiftUI 对点击的按钮进行更改

使用本地 JSON 中的键:值更改按钮/标签文本 - SwiftUI