为啥我的 TableView 单元格需要重用标识符?
Posted
技术标签:
【中文标题】为啥我的 TableView 单元格需要重用标识符?【英文标题】:Why do my TableView cells need reuse identifiers?为什么我的 TableView 单元格需要重用标识符? 【发布时间】:2020-12-31 00:15:56 【问题描述】:为了练习我的编程并跟踪我的进度,我正在为自己构建一个应用程序。我为每个要求创建了一个表格视图和每个部分和独立的单元格。现在 Xcode 不高兴了,因为每个原型单元都没有标识符。
我查看了 Swift 文档并浏览了有关该主题的 Youtube 视频,但我仍然不明白重用标识符是什么或它们的用途,更不用说它对我的情况有何帮助了。
【问题讨论】:
这是因为UITableView
可以有多个自定义单元格。所以你必须告诉表格视图哪一组行从哪个表格视图单元格中获取单元格。
【参考方案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 中添加所有这些技能,那很好,您可以这样做,但您通常不会使用原型单元格(每个单元格都有自己的重用标识符),而是使用静态表格视图单元格。
【讨论】:
以上是关于为啥我的 TableView 单元格需要重用标识符?的主要内容,如果未能解决你的问题,请参考以下文章
使用带标识符的双端可重用单元格获取 UIView 时,UIFooterView 未显示
当它们几乎没有区别时,我应该重用 tableView 单元格吗? [关闭]