我有一个UITableView
,其中有多个部分,每个部分都有多行。我想获得相对于整个表格的所选单元格的行号,而不是仅包含该部分。
示例:
UITableView
中有两个部分,第1部分有3行,第2部分有5行。didSelectRowAtIndexPath
方法中的行号,而不是将2作为行号(相对于该部分)。我尝试通过执行以下操作来获取行号,但它似乎不起作用:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%d",indexPath.row);
int theRow = indexPath.row;
NSLog(@"%d",theRow);
}
我在考虑将行号存储在int
变量中,然后自己添加行号,但在indexpath.row
中尝试存储theRow
时代码崩溃了。< / p>
请帮忙。谢谢
答案 0 :(得分:44)
NSInteger rowNumber = 0;
for (NSInteger i = 0; i < indexPath.section; i++) {
rowNumber += [self tableView:tableView numberOfRowsInSection:i];
}
rowNumber += indexPath.row;
答案 1 :(得分:9)
以下是Wain对上述答案的Swift改编
class func returnPositionForThisIndexPath(indexPath:NSIndexPath, insideThisTable theTable:UITableView)->Int{
var i = 0
var rowCount = 0
while i < indexPath.section {
rowCount += theTable.numberOfRowsInSection(i)
i++
}
rowCount += indexPath.row
return rowCount
}
答案 2 :(得分:7)
这里是Swift中这个概念的更清晰的实现:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
var rowNumber = indexPath.row
for i in 0..<indexPath.section {
rowNumber += self.tableView.numberOfRowsInSection(i)
}
// Do whatever here...
}
答案 3 :(得分:1)
我有一个大数据集,之前使用for循环的答案导致我在下半部分出现性能问题。我事先做了计算,加快了一点。
private var sectionCounts = [Int:Int]()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let number = fetchedResultsController.sections?[section].numberOfObjects ?? 0
if section == 0 {
sectionCounts[section] = number
} else {
sectionCounts[section] = number + (sectionCounts[section-1] ?? 0)
}
return number
}
func totalRowIndex(forIndexPath indexPath: NSIndexPath) -> Int {
if indexPath.section == 0 {
return indexPath.row
} else {
return (sectionCounts[indexPath.section-1] ?? 0) + indexPath.row
}
}
答案 4 :(得分:0)
我想在didSelectRowAt
/ didSelectItemAt
回调中实施以下代码......
var index: Int = indexPath.row
for i in 0..<indexPath.section {
index += collectionView.numberOfRows(inSection: i)
}
var index: Int = indexPath.item
for i in 0..<indexPath.section {
index += collectionView.numberOfItems(inSection: i)
}
示例:2个部分,每个3行(项目)。第1部分中的所选行(项目)1,
index
= 4
答案 5 :(得分:-4)
我不知道多个部分,但我可以给你一个部分......
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger index=indexPath.row;
NSString *string=[[NSString alloc]initWithFormat:@"%ld",(long)index];
}
从这里你可以获得行号,你可以将它保存到字符串....