0

所以我一直在寻找一些代码,这些代码将在我的静态 TableView 中扩展和收缩我的单元格。我发现了一个论坛帖子,有人试图做与我相同的事情并借用了一些代码。

我创建了一个基于 TableViewController 的自定义类。我添加了以下内容:

.h 文件

NSIndexPath *selectedCellIndexPath;  

.m 文件

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
selectedCellIndexPath = indexPath;

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(selectedCellIndexPath != nil
   && [selectedCellIndexPath compare:indexPath] == NSOrderedSame)
    return 80;

return 40;
}

我用它作为我的 TableView 的 viewController。

它有点用于扩展和收缩我的桌子,但不是真的。这真的很笨拙。它的动画效果不正确,并且似乎与我单击的行下方的行混淆了。

我怎样才能解决这个问题以动画和正常工作?

另外,当视图加载时,如何将行高设置为指定的数字?

谢谢

4

1 回答 1

1

您应该使用开始/结束更新,而不是重新加载选定的行。这将允许表格自动进行必要的更改,并在它们之间设置动画。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView beginUpdates];

    if ([indexPath compare:selectedCellIndexPath] == NSOrderedSame) {
        selectedCellIndexPath = [NSIndexPath indexPathForRow:NSIntegerMax inSection:0];
    }else{
        selectedCellIndexPath = indexPath;
    }

    [tableView endUpdates];
}
于 2013-08-26T19:08:46.963 回答