我无法在进入选定状态时自定义子类表视图单元格的外观和行为。
我的单元格中有三个标签,我在 initWithStyle:
方法中添加到其内容视图中:
cell1Label = [[UILabel alloc] initWithFrame:
CGRectMake(75.0f, 12.0f, 67.0f, 12.0f)];
cell1Label.backgroundColor = [UIColor clearColor];
cell1Label.textColor = [UIColor blackColor];
cell1Label.shadowColor = [UIColor whiteColor];
blah, blah, blah...
[self.contentView addSubview:cell1Label];
然后,我在子类中的 setSelected:(BOOL)selected animated:(BOOL)animated
方法的背景上放置了黑色叠加层:
UIView *backgroundView = [[UIView alloc] initWithFrame:
CGRectMake(0.0f, 0.0f, 150.0f, 70.0f)];
backgroundView.backgroundColor = [UIColor colorWithRed:
0.0 green:0.0 blue:0.0 alpha:0.4];
self.selectedBackgroundView = backgroundView;
问题从这里开始。因为我希望在选择单元格时保持UILabel
可读,我需要更改其textColor
和shadowColor
。但是,我似乎无法找到一个好地方做到这一点。
如果我将代码放在 setSelected:(BOOL)selected animated:(BOOL)animated
中,则没有任何反应;我似乎只能将更改添加到 selectedBackgroundView
。
我还尝试使用 didSelectRowAtIndexPath:
和 didDeselectRowAtIndexPath:
TableView委托方法:
CustomDataCell* selectedCell = (CustomDataCell*)[tableView
cellForRowAtIndexPath:indexPath];
selectedCell.cell1Label.shadowColor = [UIColor lightGrayColor];
selectedCell.cell1Label.textColor = [UIColor blackColor];
但是,当细胞离开可见区域时,此方法存在一些问题。也就是说,如果我选择一个单元格然后它离开可见区域,当我选择另一个单元格时,它的文本属性不会变回其正常状态。黑色背景会消失,但我分配给所选状态的新textColor
和shadowColor
仍然存在。
什么是最佳,最可靠方式来处理子类UITableViewCells
的选定(可能还有其他)状态?
我正在使用ARC
;永远不要使用IB
;在Xcode 4.6
和iOS 6.1
SDK。
答案 0 :(得分:2)
使用setHighlighted:animated
的{{1}}方法更改标签UITableViewCell
。
color
答案 1 :(得分:0)
选择单元格后,它会将所有标签(包括您自己添加的标签)设置为突出显示状态。这意味着您可以在初始化时定义突出显示的文本颜色,让细胞处理它。
可能目前标签被设置为突出显示,这正在撤消您自己制作的任何颜色变化。
此外,单元格具有您应该使用的selectedBackgroundView属性,而不是添加新的子视图。