我想获得selectedBackgroundView
与之关联的图像(我之前设置的图像)。我有这样的菜单:
此菜单有三种状态:正常(未选中,黑色图像),选中(蓝色图像)和高亮显示(灰色图像)。这很好,但有一个问题。如果我突出显示所选行,然后在不选择的情况下取消选择它(例如,通过拖动我的手指并抬起单元格外部),它将变为黑色而不是蓝色。这是非选定单元格的预期行为(因为它们在突出显示和未选定之间转换),但不适用于所选行(应在选定行和突出显示之间转换)。
这是我的行突出显示/取消突出显示的代码:
-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
self.cellBackgroundView = [[UIImageView alloc] initWithImage:self.cellBackgroundNormal];
self.cellBackgroundViewHighlighted = [[UIImageView alloc] initWithImage:self.cellBackgroundHighlighted];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"%@", cell.selectedBackgroundView);
NSLog(@"%@", self.cellBackgroundViewSelected);
if(cell.selectedBackgroundView == self.cellBackgroundViewSelected) {
self.isSelected = YES;
}
self.highlightedIndexPath = indexPath;
cell.backgroundView = self.cellBackgroundViewHighlighted;
cell.selectedBackgroundView = self.cellBackgroundView;
}
-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
self.cellBackgroundView = [[UIImageView alloc] initWithImage:self.cellBackgroundNormal];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(!cell) {
cell = [tableView cellForRowAtIndexPath:self.highlightedIndexPath];
}
if(self.isSelected) {
cell.selectedBackgroundView = self.cellBackgroundViewSelected;
self.isSelected = NO;
} else {
cell.backgroundView = self.cellBackgroundView;
}
}
基本上,我有一个BOOL
来检查并查看它是否被选中,并且根据它应该采取不同的行动。但是,我需要获取处理突出显示的委托方法中当前位于selectedBackgroundView
的图像。
NSLog
ging it(突出显示方法)给了我:
2013-04-28 23:07:18.076 App1[6403:c07] <UIImageView: 0x75d4c20; frame = (0 0; 320 44); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x75d5610>> - cell_menu_selected
2013-04-28 23:07:18.078 App1[6403:c07] <UIImageView: 0x7567350; frame = (0 0; 320 44); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x75ab2d0>> - cell_menu_selected
如您所见,最后一部分是我需要的cell_menu_selected
。这就是告诉我每个视图有什么图像的原因。我该如何提取这个?比较显然不起作用,因为它比较指针和那些是不同的。