选中后,自定义子类UITableViewCell的属性

时间:2013-03-09 13:45:14

标签: iphone ios uitableview customization

我无法在进入选定状态时自定义子类表视图单元格的外观和行为。

我的单元格中有三个标签,我在 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可读,我需要更改其textColorshadowColor。但是,我似乎无法找到一个好地方做到这一点。

如果我将代码放在 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];

但是,当细胞离开可见区域时,此方法存在一些问题。也就是说,如果我选择一个单元格然后它离开可见区域,当我选择另一个单元格时,它的文本属性不会变回其正常状态。黑色背景会消失,但我分配给所选状态的新textColorshadowColor仍然存在。

什么是最佳最可靠方式来处理子类UITableViewCells的选定(可能还有其他)状态?

我正在使用ARC;永远不要使用IB;在Xcode 4.6iOS 6.1 SDK。

2 个答案:

答案 0 :(得分:2)

使用setHighlighted:animated的{​​{1}}方法更改标签UITableViewCell

color

答案 1 :(得分:0)

选择单元格后,它会将所有标签(包括您自己添加的标签)设置为突出显示状态。这意味着您可以在初始化时定义突出显示的文本颜色,让细胞处理它。

可能目前标签被设置为突出显示,这正在撤消您自己制作的任何颜色变化。

此外,单元格具有您应该使用的selectedBackgroundView属性,而不是添加新的子视图。