更改布尔值时无法在 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 更改固定填充?