9

我有一张有 n 个部分的桌子。每个部分包含一行。如何为表创建索引路径?有一种方法可以为所有可见行创建索引路径[self.tableView indexPathsForVisibleRows]我需要类似的东西indexPathsForAllRows

我需要所有这些来仅更新表中的数据,因为方法[self.tableView reloadData];会使用页眉和页脚更新所有表。这就是为什么我必须使用reloadRowsAtIndexPaths

4

4 回答 4

10

您不需要重新加载所有行。您只需要重新加载可见单元格(这就是indexPathsForVisibleRows存在的原因)。

cellForRowAtIndexPath:一旦它们变得可见,屏幕外的单元格将获取它们的新数据。

于 2012-05-23T08:30:36.937 回答
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
}
于 2015-09-21T06:39:46.547 回答
3

UITableView根据@Vakas 的回答做了一个扩展。还必须检查节和行> 0以防止空UITableViews 崩溃:

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
    }
}
于 2016-03-25T23:11:41.920 回答
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
    }
}
于 2019-12-19T11:38:21.237 回答