获取具有多个部分的UITableview的行号

hyd*_*d00 13 objective-c uitableview didselectrowatindexpath ios

我有一个UITableView,其中有多个部分,每个部分有多行.我想获得相对于整个表而不是部分的所选单元格的行号.

例:

  1. 我有两个部分UITableView,第1部分有3行,第2部分有5行.
  2. 当我选择第2行的第2行时,我应该在didSelectRowAtIndexPath方法中得到5作为行号,而不是将2作为行号(相对于该部分).

我尝试通过执行以下操作来获取行号,但它似乎不起作用:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

NSLog(@"%d",indexPath.row);

int theRow =  indexPath.row;

NSLog(@"%d",theRow);
}
Run Code Online (Sandbox Code Playgroud)

我想将行号存储在int变量中,然后自己添加行号,但是在尝试存储时代码崩溃 indexpath.rowtheRow.

请帮忙.谢谢

Wai*_*ain 44

NSInteger rowNumber = 0;

for (NSInteger i = 0; i < indexPath.section; i++) {
    rowNumber += [self tableView:tableView numberOfRowsInSection:i];
}

rowNumber += indexPath.row;
Run Code Online (Sandbox Code Playgroud)

  • ...或`[self.tableView numberOfRowsInSection:i]` - 表视图缓存从数据源返回的值. (6认同)

PJe*_*ouf 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
}
Run Code Online (Sandbox Code Playgroud)


Max*_*ick 8

这是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...
}
Run Code Online (Sandbox Code Playgroud)