2

我正在尝试让我的 UITableViewCell 在突出显示时更改它的附件视图。因此,突出显示时配件会更暗。到目前为止,我已经设法使它工作得很好,但有一个例外。当按下一个单元格时,它会导致该单元格突出显示,但是当按下该按钮并取消突出显示时,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;
}
4

2 回答 2

8

我尝试复制您的设置,我发现传递给的 indexPathdidUnhighlightRowAtIndexPath包含一个 NSNotFound 行。所以你可能想检查你进入的单元格是否didUnhighlightRowAtIndexPath非零。如果事实证明您将错误的 indexPaths 传递给 didUnhighlightRowAtIndexPath,那么我认为我们可以将其归结为新 API 中的一个错误,您将要使用 didSelectRow 和 didDeselectRow,或者子类 UITableViewCell 并注意更改到您的子类中选定和突出显示的状态。

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

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

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

于 2013-03-28T21:22:22.190 回答
0

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

于 2013-03-28T21:06:35.563 回答