我有一个包含多个节的表视图,每个节有多于一行,但是节中的行数不相等,就像这样
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个元素索引路径吗?
答案 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
}