我有一个包含n个部分的表格。每个部分包含一行。如何为表创建索引路径?
有一种方法可以为所有可见行创建索引路径[self.tableView indexPathsForVisibleRows]
我需要类似indexPathsForAllRows
我需要所有这些只更新表中的数据,因为方法[self.tableView reloadData];
使用页眉和页脚更新所有表。这就是我必须使用reloadRowsAtIndexPaths
答案 0 :(得分:10)
您不需要重新加载所有行。您只需要重新加载可见单元格(这就是indexPathsForVisibleRows
存在的原因)。
屏幕外的单元格一旦显示就会在cellForRowAtIndexPath:
中获取新数据。
答案 1 :(得分:5)
这是Swift 3中的解决方案
func getAllIndexPaths() -> [IndexPath] {
var indexPaths: [IndexPath] = []
// Assuming that tableView is your self.tableView defined somewhere
for i in 0..<tableView.numberOfSections {
for j in 0..<tableView.numberOfRows(inSection: i) {
indexPaths.append(IndexPath(row: j, section: i))
}
}
return indexPaths
}
答案 2 :(得分:3)
我根据@Vakas的答案做了UITableView
分机。此外,必须检查> 0
的部分和行,以防止空UITableView
的崩溃:
extension UITableView{
func getAllIndexes() -> [NSIndexPath] {
var indices = [NSIndexPath]()
let sections = self.numberOfSections
if sections > 0{
for s in 0...sections - 1 {
let rows = self.numberOfRowsInSection(s)
if rows > 0{
for r in 0...rows - 1{
let index = NSIndexPath(forRow: r, inSection: s)
indices.append(index)
}
}
}
}
return indices
}
}
答案 3 :(得分:1)
此代码将为您提供完整的索引:
extension UITableView {
func allIndexes() -> [IndexPath] {
var allIndexes: [IndexPath] = [IndexPath]()
let sections = self.sectionCount() ?? 0
if sections > 1 {
for section in 0...sections-1 {
let rows = self.rowCount(section: section) ?? 0
if rows > 1 {
for row in 0...rows-1 {
let index = IndexPath(row: row, section: section)
allIndexes.append(index)
}
} else if rows == 1 {
let index = IndexPath(row: 0, section: section)
allIndexes.append(index)
}
}
} else if sections == 1 {
let rows = self.rowCount(section: 0) ?? 0
if rows > 1 {
for row in 0...rows-1 {
let index = IndexPath(row: row, section: 0)
allIndexes.append(index)
}
} else if rows == 1 {
let index = IndexPath(row: 0, section: 0)
allIndexes.append(index)
}
}
return allIndexes
}
}