UITableViewCell textColor不会随userInteractionEnabled = NO而改变

时间:2011-10-17 12:06:37

标签: iphone uitableview uilabel uicolor

我正在尝试使用UILabel属性简单地更改textColor的颜色,并且当禁用userInteraction时它将无效,这没有任何意义,文档中没有任何内容提到这一点。但是,如果我删除该行颜色确实发生了变化,那就是正在发生的事情,但我不希望用户进行交互。

UITableViewCellStyleValue1

单元格左侧带有标签的单元格样式,左对齐且 黑色文字 ;在右侧是一个标签,其 蓝色文字 较小,并且是右对齐的。 “设置”应用程序使用此样式的单元格。 适用于iOS 3.0及更高版本。

两个标签都是 灰色 颜色,并且它们不会改变颜色。这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }

    //If I remove this line the color changes
    cell.userInteractionEnabled = NO;

    UIColor *blackColor = [UIColor blackColor];

    UILabel *mainLabel = cell.textLabel;
    UILabel *detailTextLabel = cell.detailTextLabel;
    mainLabel.backgroundColor = blackColor;
    detailTextLabel.backgroundColor = blackColor;

    //Trying to change color here but no effect
    mainLabel.textColor = [UIColor redColor];
    detailTextLabel.textColor = [UIColor whiteColor];

    UIView *backView = [[[UIView alloc] initWithFrame:cell.frame] autorelease];
    backView.backgroundColor = blackColor;
    cell.backgroundView = backView;

    mainLabel.text = @"Some text";

    return cell;
}
编辑:我刚刚意识到,它与userInteractionEnabled = NO有关,当删除文本颜色更改时,但我不想要用户交互,我怎么能关闭它但也改变颜色?创建我自己的UILabels并将其添加到contentView

2 个答案:

答案 0 :(得分:10)

好的,我知道如何解决这个问题,但它根本没有任何意义,问题是这一行:

cell.userInteractionEnabled = NO;

如果删除了textColor更改,那么奇怪的是,如果我在更改textColor颜色更改后更改了用户互动!

这是一个错误吗?我希望这个答案有助于任何人试图解决这个问题,因为它根本没有任何意义,并且没有关于此的文档。

答案 1 :(得分:2)

请检查我对类似问题的回答:

https://stackoverflow.com/a/18552074/921573

相应地在textLabels上设置enabled属性可以解决此问题:

cell.userInteractionEnabled = (indexPath.row % 2) == 0;
cell.textLabel.enabled = cell.isUserInteractionEnabled;
cell.detailTextLabel.enabled = cell.isUserInteractionEnabled;