【问题标题】:Why do my TableView cells need reuse identifiers?为什么我的 TableView 单元格需要重用标识符?
【发布时间】:2020-12-31 00:15:56
【问题描述】:

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

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

【问题讨论】:

  • 这是因为UITableView 可以有多个自定义单元格。所以你必须告诉表格视图哪一组行从哪个表格视图单元格中获取单元格。

标签: swift uitableview reuseidentifier


【解决方案1】:

如果您正在为每个值创建一个新单元格(“数组函数”、“Cocoapods”等)。如果使用单元原型,您通常不会这样做。您通常会有一个原型单元格,例如,一个重用标识符为SkillCell 的原型单元格,其标签将居中对齐。因此,您不会在故事板中看到所有这些不同的技能,而是您的表格视图的数据源会提供值,实例化您重复使用的 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 中添加所有这些技能,那很好,您可以这样做,但您通常不会使用原型单元格(每个单元格都有自己的重用标识符),而是使用静态表格视图单元格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多