在UITableViewCell的亮点上更改accessoryView

bvo*_*ang 2 objective-c uitableview ios ios6

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

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

正常状态: 正常细胞状态

突出的国家 在此输入图像描述

按下并移动触摸后(我想避免): 在此输入图像描述

 - (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;
}
Run Code Online (Sandbox Code Playgroud)

Aar*_*den 8

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

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

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory"] highlightedImage:[UIImage imageNamed:@"accessoryDark"]];
Run Code Online (Sandbox Code Playgroud)

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