如何为uitableview创建所有行和所有部分的索引路径?

时间:2012-05-23 07:51:16

标签: ios xcode uitableview nsindexpath

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

之类的东西

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

的原因

4 个答案:

答案 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
    }
}