在不重新加载单元格的情况下更改UITableViewCell中的图像

时间:2012-05-22 17:55:03

标签: iphone image uitableview

我正在编写一个以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];

诀窍。

1 个答案:

答案 0 :(得分:1)

您还可以子类化tableview单元格并在其中实现可以从视图控制器调用的视图转换。然后你可以调用它而无需重新加载单元格。

[(YourCustomCell*)[tableView  cellForRowAtIndexPath:indexPathOfYourCell] fadeInIndicator];