如何在iOS的TableView中找到第n个索引路径?

时间:2018-07-17 11:38:07

标签: swift tableview

我有一个包含多个节的表视图,每个节有多于一行,但是节中的行数不相等,就像这样

first 1
"row 1.1"

second 2
"row 2.1"
"row 2.2"
"row 2.3"----->

second 3
"row 3.1"
"row 3.2"
"row 3.3"
"row 3.4"
"row 3.5"
"row 3.6"

我想在表格视图中获取第4个元素,即“第2.3行”
它的索引路径是[1,2]
我应该如何获得该索引路径?

我的解决方案是在表视图中找到“行2.3”,然后找到其indexPath。还有其他方法来获取第n个元素索引路径吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试

var neededNumber = 5 - 1 // 5th element

var index:IndexPath?

for sec in 0..<tableView.numberOfSections {

    if neededNumber < tableView.numberOfRows(inSection: sec) {

        index = IndexPath(row: neededNumber, section: sec)

        break
    }
    else
    {
        neededNumber -= tableView.numberOfRows(inSection: sec)
    }

 }

if let myIndex = index {

    print(myIndex)

}

答案 1 :(得分:1)

您必须遍历各节,减去其中的行数 给定索引中的当前节,直到该索引是当前节中的有效行号。像这样(未经测试):

extension UITableView {
    func indexPath(forIndex index: Int) -> IndexPath? {
        var row = index
        var section = 0
        while section < self.numberOfSections && row >= self.numberOfRows(inSection: section) {
            row -= self.numberOfRows(inSection: section)
            section += 1
        }
        if section < self.numberOfSections {
            return IndexPath(row: row, section: section)
        } else {
            return nil
        }
    }
}

(假定给定索引是从零开始的,即tableView.indexPath(forIndex: 0)返回第一个有效索引路径 表格视图)。

答案 2 :(得分:1)

func indexPath(for index: Int) -> IndexPath? {
    var counter = 0
    for sectionIndex in 0..<tableView.numberOfSections {
        for rowIndex in 0..<tableView.numberOfRows(inSection: sectionIndex) {
            if index == counter {
                return IndexPath(row: rowIndex, section: sectionIndex)
            }
            counter += 1
        }
    }
    return nil
}