我正在编写一个以 UITableView 作为主要用户界面的 iPhone 应用程序。每个部分由两行组成,标题和正文。当用户单击标题时,我通过更改 numberOfRowsInSection 值来删除第二行:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
cbwComponent *comp = [_componentController objectInListAtIndex:section];
if([comp hasContentsView] && !comp.contentsHidden){
return 2;
}else
return 1;
}
当用户选择标题时,我使用以下代码:
comp.contentsHidden = YES;
[self.tableView beginUpdates];
NSArray *deleteIndexPaths = [[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow:1 inSection:indexPath.section], nil];
[self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
它工作得很好,具有很好的平滑淡入淡出效果。问题是,我正在尝试在标题单元格(第 0 行)中添加一个指示器,该指示器在单击时会发生变化。要更改该图像,我必须刷新第一行和第二行,这使得过渡看起来很糟糕(嗯,几乎没有那么平滑)。有没有办法在不刷新单元格的情况下更改 UITableViewCell 中的图像?
谢谢
编辑:我想通了!只要在对第二行进行更改之前重新加载第一行,就可以保持平滑过渡。它必须在 [tableView beginUpdates] 内部调用;
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow:0 inSection:indexPath.section], nil] withRowAnimation:UITableViewRowAnimationNone];
...
[self.tableView endUpdates];
成功了。