我有一个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;
}
答案 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;
}