0

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

成功了。

4

1 回答 1

1

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

[(YourCustomCell*)[tableView  cellForRowAtIndexPath:indexPathOfYourCell] fadeInIndicator];
于 2012-05-22T18:30:50.747 回答