我正在完成UITableView
教程,并且在实施UITableViewDataSource
方法时,我对数组迭代感到好奇。当我们调用indexPath.row
时,这是否在幕后为我们调用for循环?我问,因为几个月前我正在学习使用网络服务中的数据(我已经忘记了我如何精确地完成它的确切步骤)但我相信我需要迭代数组才能呈现控制台中的信息。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Create an instance of UITableViewCell, with default appearance
let cell = UITableViewCell.init(style: .value1, reuseIdentifier: "UITableViewCell")
// Set the text on the cell with the description of the item instance that is at the nth index of the allItems array, where n = row this cell will appear in on the tableview
let item = itemStore.allItems[indexPath.row]
cell.textLabel?.text = item.name
cell.detailTextLabel?.text = "$\(item.valueInDollars)"
return cell
}
我认为indexPath.row
方法在幕后为我们迭代数组是否正确?
let item = itemStore.allItems[indexPath.row]
答案 0 :(得分:3)
不,调用indexPath.row
不会为您迭代所有行。它只是发送到cellForRowAt
的变量,您可以访问并使用它来创建您的单元格。它包含有关函数cellForRowAt
被调用的部分中哪一行的信息。
但是,每次在 tableVIew 上显示一个单元格时,都会调用cellForRowAt
。想象一下,您有一个包含100个项目的 dataSource ,并且一次只能看到10个单元格。最初加载 tableView 时,cellForRowAt
将被调用10次。然后,如果您滚动 tableView 以显示另外3个单元格,cellForRowAt
将再次被调用3次。
答案 1 :(得分:1)
没有。 indexPath
只是一个包含section
和row
的结构。您可以使用它们直接从阵列中查找信息。没有迭代发生。
cellForRowAt
仅针对屏幕上的单元格调用,因此调用它们的顺序取决于您正在滚动的方向。
事实上,UITableView
甚至不知道您是在使用数组,还是在运行中生成信息。您对indexPath
row
和section
所做的工作取决于您。
答案 2 :(得分:1)
首先,教程似乎非常糟糕。表视图单元应该被重用
let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)
显示表格视图单元格的工作流程为:
numberOfRowsInSection
(以及numberOfSections
)cellForRowAt
并在第二个参数中传递索引路径。答案 3 :(得分:1)
查看UITableView和cellForRowAtIndexpath函数的文档。
在tableView中定位行的索引路径。
IndexPath将是一个结构,它可以帮助您从嵌套数组中获取特定位置。在您的表视图的情况下,该部分内的行。
cellForRow将返回特定索引路径的单元格(在指定的部分和行中)
因此indexPath.section将给出要修改单元格并返回到数据源的节号。在部分内部,indexPath.row将是该部分内的相应行。
tableView-CellForRowAt: IndexPath
UITableView DataSource Documentation
[更新]
如果要添加多个部分,请添加另一个dataSource numberOfSections,并从中返回计数的部分数。
我可以链接到Apple的create a table view tutorial,但这是一个很长的文档,您可以跳过开始并阅读在表格视图中显示一个部分。
如果需要,可以使用2D数组来保留节和行。并在 numberOfSections 方法中返回array.count,并在 numberOfRows:inSection 中,返回数组[section] .count
更多例子,
感谢, Ĵ