为按钮创建单向绑定
Posted
技术标签:
【中文标题】为按钮创建单向绑定【英文标题】:Creating a one-way binding for buttons 【发布时间】:2020-06-18 22:24:14 【问题描述】:我一直在尝试在这里测试一些代码,但我无法让它工作。
所以对于我希望它如何工作的原则:
在这个单一视图中,按下第一个 hello 按钮后,它应该运行一个函数来确定接下来的 4 个按钮显示什么。我不确定如何创建这种单向绑定以允许运行该功能并在按下后显示 4 个按钮。
我不断收到此错误:
“按钮”初始化程序的结果未使用
我尝试过的事情:
-
在第一个Hello按钮的闭包中添加要出现的4个按钮,点击后什么都没有出现但是编译成功了!
有人可以帮忙吗?
var toggle1 = false
var buttonArray = [12,25,33,4]
var numberArray = [Int]()
func convertingIntoImage()
for numbers in buttonArray
let numberInString = String(numbers)
numberArray = numberInString.compactMap str in Int(numberInString)
struct tryingOut : View
var body : some View
Button(action: convertingIntoImage() )
Text("hello")
Button(action: print("Hello") )
ForEach (numberArray, id: \.self)
Image(systemName: "\($0)" + ".circle.fill")
【问题讨论】:
【参考方案1】:如果我正确理解了您的问题,您可以尝试以下代码:
struct ContentView: View
@State var toggle1 = false
@State var buttonArray = [12, 25, 33, 4]
var body: some View
VStack
if !toggle1
Button(action: self.toggle1.toggle() )
Text("hello")
else
Button(action: print("Hello") )
ForEach(buttonArray, id: \.self)
Image(systemName: "\($0)" + ".circle.fill")
您不需要单独的函数来转换buttonArray
。您可以使用toggle
在显示hello
按钮和您的四个图像之间切换。
【讨论】:
感谢您的回复!我刚刚尝试了您的代码,但实时预览似乎对切换后从 1 个按钮更改为 4 个按钮没有影响。我还尝试使用我的原始代码,将我的变量和函数放在 ObservableOject 类中。从 1 按钮切换到 4 按钮后,这也不会更新视图。你知道可能出了什么问题吗?谢谢!哦,我也尝试了实时和调试预览。谢谢! @LCHUNG 哦,对。我应该使用VStack
而不是Group
。我更新了我的代码 - 现在它也可以在预览中使用。
啊!谢谢!你知道为什么集团不做这项工作吗?我从没想过 Group 是罪魁祸首。
@LCHUNG Group
本身不是问题。当您将Group
放入VStack
时,它也可以在预览中使用。只有顶层的Group
(在body
中)会中断预览。看起来*** View
没有在预览中动态刷新。以上是关于为按钮创建单向绑定的主要内容,如果未能解决你的问题,请参考以下文章