在UITableViewCell的亮点上更改accessoryView

时间:2013-03-28 20:52:48

标签: ios objective-c uitableview ios6

我正在尝试让我的UITableViewCell在高亮显示时改变它的accessoryView。所以配件在突出显示时会变暗。到目前为止,我已经设法让它工作得非常好,只有一个例外。当按下一个单元格时,它会使单元格突出显示,但当移动该按下并取消突出显示时,accessoryView会保留其突出显示的图像。

有没有办法检测突出显示是否被取消所以我可以将accessoryView更改回应该是什么?我是否需要创建UITableViewCell的子类才能实现此目的?任何帮助是极大的赞赏。谢谢!

正常状态: Normal cell state

突出显示状态 enter image description here

按下并移动触摸后(我想避免): enter image description here

 - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    UIImageView *accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessoryDark.png"]];
    cell.accessoryView = accessoryView;
}

- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    UIImageView *accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]];
    cell.accessoryView = accessoryView;
}

2 个答案:

答案 0 :(得分:8)

我尝试重现你的设置,我发现传递给didUnhighlightRowAtIndexPath的indexPath包含一个NSNotFound行。因此,您可能需要检查didUnhighlightRowAtIndexPath中的单元格是否为非零。如果你得到错误的indexPaths传递给didUnhighlightRowAtIndexPath,那么我认为我们可以将它归结为新API中的一个错误,你会想要使用didSelectRow和didDeselectRow,或者是UITableViewCell的子类并注意变化到子类中选定和突出显示的状态。

您可以尝试的另一件事是将配件视图设置为

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory"] highlightedImage:[UIImage imageNamed:@"accessoryDark"]];

然后(理论上)附件视图将根据单元格的突出显示状态自动显示正确的突出显示或未突出显示的图像,您不必在委托方法中观察这些更新。

答案 1 :(得分:0)

尝试使用didSelectRow...didDeselectRow...。您还应该保留ref到所选单元格的索引路径。这样滚动就不会弄乱您的单元格(当然,在cellForRow...中检查当前单元格是否为选定单元格,并相应地设置附件视图)。希望这有帮助!