indexpath.row 是否负责迭代数组?
Does indexpath.row take care of iterating an array?
我正在学习 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]
没有。 indexPath
只是一个带有 section
和 row
的结构。您可以使用它们直接从数组中查找信息。没有迭代发生。
cellForRowAt
仅针对屏幕上的单元格调用,因此它们的调用顺序取决于您滚动的方向。
事实上,UITableView
甚至不知道您是在使用数组还是动态生成信息。您如何使用 indexPath
row
和 section
由您决定。
不,调用 indexPath.row
不会为您遍历所有行。它只是一个发送到 cellForRowAt
的变量,您可以访问并使用它来创建您的单元格。它包含有关函数 cellForRowAt
在哪个部分的哪一行被调用的信息。
但是,每次要在 tableVIew 上显示一个单元格时,实际上都会调用 cellForRowAt
。想象一下,您有一个包含 100 个项目的 dataSource,并且一次只能看到 10 个单元格。当 tableView 最初加载时,cellForRowAt
将被调用 10 次。然后,如果您滚动 tableView 以显示另外 3 个单元格,cellForRowAt
将被调用 3 次。
首先教程似乎很糟糕。 Table 视图单元格应该被重复使用
let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)
显示 table 个视图单元格的工作流程是:
- 框架调用
numberOfRowsInSection
(以及 numberOfSections
)
- 对于可见单元格范围内的每个 section/row 对,它调用
cellForRowAt
并在第二个参数中传递索引路径。
查看 UITableView 和 cellForRowAtIndexpath 函数的文档。
An index path locating a row in tableView.
IndexPath 将是一个结构,它可以帮助您从嵌套数组中获取特定位置。在您的 table 视图的情况下,该部分内的行。
cellForRow 将 return 特定索引路径的单元格(在指定的部分和行中)
因此 indexPath.section 将给出要修改单元格的节号,并 returned 到数据源。在该部分内,indexPath.row 将是该部分内的相应行。
tableView-CellForRowAt: IndexPath
UITableView DataSource Documentation
[更新]
如果要添加多个部分,请添加另一个数据源 numberOfSections,然后 return 从中计算部分数。
我可以 link 到 Apple 的 create a table view tutorial,但它是一个很长的文档,您可以跳过开头并阅读 在您的 [=64] 中显示一个部分=] 查看.
如果需要,您可以使用二维数组来保留部分和行。在 numberOfSections 方法 return array.count 和 numberOfRows:inSection, return 数组[section] .count
更多示例,
谢谢,
J
我正在学习 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]
没有。 indexPath
只是一个带有 section
和 row
的结构。您可以使用它们直接从数组中查找信息。没有迭代发生。
cellForRowAt
仅针对屏幕上的单元格调用,因此它们的调用顺序取决于您滚动的方向。
事实上,UITableView
甚至不知道您是在使用数组还是动态生成信息。您如何使用 indexPath
row
和 section
由您决定。
不,调用 indexPath.row
不会为您遍历所有行。它只是一个发送到 cellForRowAt
的变量,您可以访问并使用它来创建您的单元格。它包含有关函数 cellForRowAt
在哪个部分的哪一行被调用的信息。
但是,每次要在 tableVIew 上显示一个单元格时,实际上都会调用 cellForRowAt
。想象一下,您有一个包含 100 个项目的 dataSource,并且一次只能看到 10 个单元格。当 tableView 最初加载时,cellForRowAt
将被调用 10 次。然后,如果您滚动 tableView 以显示另外 3 个单元格,cellForRowAt
将被调用 3 次。
首先教程似乎很糟糕。 Table 视图单元格应该被重复使用
let cell = tableView.dequeueReusableCell(withIdentifier: "UITableViewCell", for: indexPath)
显示 table 个视图单元格的工作流程是:
- 框架调用
numberOfRowsInSection
(以及numberOfSections
) - 对于可见单元格范围内的每个 section/row 对,它调用
cellForRowAt
并在第二个参数中传递索引路径。
查看 UITableView 和 cellForRowAtIndexpath 函数的文档。
An index path locating a row in tableView.
IndexPath 将是一个结构,它可以帮助您从嵌套数组中获取特定位置。在您的 table 视图的情况下,该部分内的行。
cellForRow 将 return 特定索引路径的单元格(在指定的部分和行中)
因此 indexPath.section 将给出要修改单元格的节号,并 returned 到数据源。在该部分内,indexPath.row 将是该部分内的相应行。
tableView-CellForRowAt: IndexPath
UITableView DataSource Documentation
[更新]
如果要添加多个部分,请添加另一个数据源 numberOfSections,然后 return 从中计算部分数。
我可以 link 到 Apple 的 create a table view tutorial,但它是一个很长的文档,您可以跳过开头并阅读 在您的 [=64] 中显示一个部分=] 查看.
如果需要,您可以使用二维数组来保留部分和行。在 numberOfSections 方法 return array.count 和 numberOfRows:inSection, return 数组[section] .count
更多示例,
谢谢, J