iphone – 选中时自定义子类UITableViewCell的属性

当进入选定状态时,我无法自定义子类tableview单元格的外观和行为.

我的单元格有三个标签,我在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)中的背景顶部放置了一个黑色覆盖图,在子类中选择了动画:(BOOL)动画方法:

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)中选中动画:(BOOL)动画没有任何反应;我似乎只能添加对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上.

最佳答案 使用setHighlighted:UITableViewCell的动画方法来更改标签颜色.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Change you label text color here
    //
    // Edit Here

    if (selected) {
        // New Colors Here
    }
    else {
        // Old Colors Here
    }
}
点赞