4

我在自定义子类 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)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在选择单元格时保持可读性,所以我需要更改它们的textColorand shadowColor。但是,我似乎找不到这样做的好地方。

如果我把代码放在setSelected:(BOOL)selected animated:(BOOL)animated什么都没有发生;我似乎只能对selectedBackgroundView.

我还尝试使用TableView 委托方法didSelectRowAtIndexPath:didDeselectRowAtIndexPath:如下所示:

CustomDataCell* selectedCell = (CustomDataCell*)[tableView 
    cellForRowAtIndexPath:indexPath];
selectedCell.cell1Label.shadowColor = [UIColor lightGrayColor];
selectedCell.cell1Label.textColor = [UIColor blackColor];

但是,当单元格离开可见区域时,此方法会出现一些问题。也就是说,如果我选择了一个单元格,那么它会离开可见区域,当我选择另一个单元格时,它的文本属性不会变回它们的正常状态。黑色背景应该会消失,但分配给所选状态的 newtextColor和I 仍然存在。shadowColor

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

我正在使用ARC;从不使用IB;和Xcode 4.6SDK iOS 6.1

4

2 回答 2

2

使用 的setHighlighted:animated方法UITableViewCell更改您的标签color

- (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
    }
}
于 2013-03-09T13:56:10.563 回答
0

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

可能目前标签被设置为突出显示,这正在撤消您自己进行的任何颜色更改。

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

于 2013-03-09T13:51:46.337 回答