【问题标题】:Creating a one-way binding for buttons为按钮创建单向绑定
【发布时间】:2020-06-18 22:24:14
【问题描述】:

我一直在尝试在这里测试一些代码,但我无法让它工作。

所以对于我希望它如何工作的原则:

在这个单一视图中,按下第一个 hello 按钮后,它应该运行一个函数来确定接下来的 4 个按钮显示什么。我不确定如何创建这种单向绑定以允许运行该功能并在按下后显示 4 个按钮。

我不断收到此错误:

“按钮”初始化程序的结果未使用

我尝试过的事情:

  1. 在第一个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")
            }
        }
    }
}

【问题讨论】:

    标签: swift button binding swiftui


    【解决方案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 没有在预览中动态刷新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2017-01-16
    • 2016-04-10
    • 2011-07-03
    • 2021-12-26
    • 2011-02-07
    • 1970-01-01
    相关资源
    最近更新 更多