为什么我的 TableView 单元格需要重用标识符?

Why do my TableView cells need reuse identifiers?

为了练习我的编程并跟踪我的进度,我正在为自己构建一个应用程序。我为每个部分创建了一个表格视图,并为每个要求创建了独立的单元格。现在 Xcode 很沮丧,因为每个原型单元格都没有标识符。

我查看了 Swift 文档并浏览了有关该主题的 Youtube 视频,但我仍然不明白什么是重用标识符或它们的用途,更不用说它如何帮助我的情况。

如果看起来您正在为每个值创建一个新单元格(“数组函数”、“Cocoapods”等)。如果使用单元原型,您通常不会这样做。你通常会有一个单一的原型单元格,比如说,一个带有重用标识符 SkillCell 的单元格,它会有一个居中对齐的标签。因此,您不会在故事板中看到所有这些不同的技能,而是您的 table 视图的数据源将提供值,实例化您重复使用的 SkillCell 单元格,将技能名称传递给它:

所以你的故事板可能看起来像

然后您将以编程方式填充它:

struct Skill {
    let name: String
}

struct SkillLevel {
    let name: String
    let skills: [Skill]
}

class ViewController: UIViewController {
    let sections = [
        SkillLevel(name: "Minimum Required Skills", skills: [
            Skill(name: "Array Functions"),
            Skill(name: "CocoaPods"),
            Skill(name: "API Requests"),
            Skill(name: "JSON")
        ]),
        SkillLevel(name: "Intermediate Required Skills", skills: [
            Skill(name: "Grand Central Dispatch"),
            Skill(name: "Combine"),
            Skill(name: "MVC vs MVP vs MVVM vs MVVM-C")
        ])
    ]
}

extension ViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return sections[section].skills.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "SkillCell", for: indexPath) as! SkillCell
        cell.skillLabel.text = sections[indexPath.section].skills[indexPath.row].name
        return cell
    }
}

extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return sections[section].name
    }
}

产量:

现在,如果您想在 IB 中添加所有这些技能,那很好,您可以这样做,但您通常不会使用原型单元(每个单元都有自己的重用标识符),而是静态的 table 查看单元格。