UITableViewSection行指数

时间:2014-01-02 14:27:37

标签: ios objective-c uitableview

我有一个UITableView有三个部分(星期五,星期六,星期日),每个部分都有不同的数据和不同的行数。选中后,所选行将展开,但具有相同索引的其他两个部分中的行也会展开。我只想要单个选定的行进行扩展。

有没有办法在我的didSelectRowAtIndexPath方法中获取该部分,并在我的heightForRowAtIndexPath方法中使用它以保持所有其他行的未展开大小?

以下方法都在我的UITableView子类中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
customCell *cell = [tableView cellForRowAtIndexPath:indexPath];

//Close row if tapped a second time
if(self.currentSelection == indexPath.row) {
    self.currentSelection = -1;
}
//Otherwise, expand row
else {
    self.currentSelection = indexPath.row;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
int rowHeight;
if ([indexPath row] == self.currentSelection) {
    rowHeight = 185;
} else rowHeight = 44;
return rowHeight;
}

2 个答案:

答案 0 :(得分:1)

检查NSIndexPath。该对象包含作为属性的部分。

答案 1 :(得分:0)

将索引路径保存为您的选择,而不仅仅是行。在您保存的那一刻,比如第2行,每个部分都有第2行,因此该行在所有部分都在扩展。

您可以按如下方式比较索引路径:

if([indexPath1 isEqual:indexPath2])
    // Do your thing

更好的是,UITableView具有indexPathForSelectedRow属性,因此您甚至不需要自己的变量来跟踪此信息:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
int rowHeight;
if ([indexPath isEqual:tableView.indexPathForSelectedRow]) {
    rowHeight = 185;
} else rowHeight = 44;
return rowHeight;
}