我通过以下方式扩展我的细胞:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(selectedRow && indexPath.row == selectedRow.row) {
tableView.scrollEnabled = NO;
return 480;
}
return 250;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
selectedRow = indexPath;
[tableView beginUpdates];
[tableView endUpdates];
CGFloat height = 250.0f;//cell height
tableView.contentInset = UIEdgeInsetsMake(0, 0, height * indexPath.row, 0);
[tableView setContentOffset:CGPointMake(0, (indexPath.row * height) )animated:YES];
}
它工作正常,每当我选择一个单元格时,它确实会扩展,但我无法弄清楚如何将其恢复到原始高度。有什么想法吗?
答案 0 :(得分:1)
试试这个:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(selectedRow.row == indexPath.row)
selectedRow = nil;
else
selectedRow = indexPath;
[tableView beginUpdates];
[tableView endUpdates];
[tableView reloadData];
}
答案 1 :(得分:1)
试试这个
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(selectedRow && indexPath.row == selectedRow.row) {
tableView.scrollEnabled = NO;
return 480;
}
tableView.scrollEnabled = YES;
return 250;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat height = 250.0f;
if (selectedRow && indexPath.row == selectedRow.row) {
NSIndexPath *index = [NSIndexPath indexPathForRow:selectedRow.row inSection:selectedRow.section];
selectedRow = nil;
[tableView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone];
tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
[tableView setContentOffset:CGPointMake(0, 0 )animated:NO];
} else {
selectedRow = indexPath;
[tableView beginUpdates];
[tableView endUpdates];
tableView.contentInset = UIEdgeInsetsMake(0, 0, height * indexPath.row, 0);
[tableView setContentOffset:CGPointMake(0, (indexPath.row * height) )animated:NO];
}
}
答案 2 :(得分:0)
我建议你在tableView数据源对象中添加一个自定义属性,如isExpanded
,并根据选择和返回高度根据此值切换该属性。
例如:在你的heightForRowAtIndexPath
方法中,你可能会有这样的事情。
if(yourCustomCell.isExpanded == true){
return 480;
}
else{
return 250;
}
在didSelectRowAtIndexPath
方法中,只需设置或取消设置此属性。
yourCustomCell.isExpanded = !yourCustomCell.isExpanded
[tableView reloadData]; //Which will call heightForRow and then assign new height based on the property value.
现在,如果您没有自定义单元格对象,那么我认为您可以使用单元格的isSelected
属性。
我还没试过这些,但我想这应该可行。