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

Posted

技术标签:

【中文标题】如何为uitableview的所有行和所有部分创建索引路径?【英文标题】:How to create indexpaths for all rows and all sections for uitableview? 【发布时间】:2012-05-23 07:51:16 【问题描述】:

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

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

【问题讨论】:

为什么需要更新屏幕外的行?它们将在 cellForRowAtIndexPath 中更新:只要您的模型更新 你的意思是只要它们可见就会更新? 【参考方案1】:

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

屏幕外的单元格一旦变得可见,就会在cellForRowAtIndexPath: 中获取新数据。

【讨论】:

我从来没有想过以这种方式使用 indexPathForVisibleRows。【参考方案2】:

这是 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

【讨论】:

【参考方案3】:

我根据@Vakas 的回答做了一个UITableView 扩展。此外,必须检查部分和行是否有 &gt; 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
    

【讨论】:

【参考方案4】:

此代码将为您提供完整的索引:

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
    

【讨论】:

以上是关于如何为uitableview的所有行和所有部分创建索引路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有屏幕的 iPhone 应用程序添加垂直滑动手势?

UITableView 动态部分

如何为 UITableView 部分标题动态设置背景颜色?

如何为自定义 UITableView 标题部分笔尖添加分隔线? [复制]

如何为超过 3000 万行和 250 列的表优化 Oracle 创建表功能

如何为不同的 UITableView 部分使用不同的表格视图单元格类