首页 > 解决方案 > 您如何访问和保存集合视图中单个单元格的数据?

问题描述

我正在为投票应用程序构建原型。到目前为止,我有一个集合视图,其中每个单元格都包含一个人的姓名、描述和一个滑块,用于在一个视图控制器上选择一个值。在下一个视图控制器上,我有一个包含 3 个单元格的集合视图,这些单元格应该从前一个屏幕填充。

我正在尝试使用 UserDefaults 保存前 3 个人(或单元格),以便我可以在第二个视图控制器上显示它们。这是我现在拥有的代码:

@objc func sliderDidEndSliding(sender: UISlider) {
        var defaults = UserDefaults.standard
        array.append("\(nameLabel.text)")
        defaults.set(array, forKey: "SavedStringArray")

        let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
        print(myarray)
    }

我无法完全弄清楚如何做我想做的事情。目前,代码仅显示上次更改的滑块的名称,这些滑块填充在所有三个单元格中。这显然是不正确的,应该为每个单元格显示三个不同的名称,而不是每个单元格中的同一个人。我的问题是,我将如何在视图控制器中保存来自三个不同单元格的信息?

标签: iosswiftuicollectionview

解决方案


你的方法是错误的。您不应该使用集合视图/表格视图单元格来存储数据。曾经。

您应该使用单元格和其中的视图向用户显示信息,并收集用户的输入。用户更改值的那一刻(在文本字段中按回车键输入数据、点击按钮、更改滑块值等),您应该收集更改的值并将其保存到数据模型。对于集合视图和表视图,数组或数组数组通常是数据模型所需的全部内容。您定义一个描述单元格不同值的结构,然后创建这些结构的数组(用于简单的线性集合/表格视图)或数组数组(用于集合视图单元格的网格模式,或用于分段表格视图.)

如果您需要将数据传递给另一个视图控制器,您可以只传递数据模型对象。如果您需要持久化数据,请持久化数据模型对象(请注意,UserDefaults 是保存数据模型的错误选择。它旨在保存简单的设置,如用户首选项,而不是大型或复杂的结构。)


推荐阅读