在自定义单元格中自定义UILabels颜色

时间:2012-11-25 11:53:30

标签: objective-c ios cocoa-touch

我在TableView中使用了一些自定义单元格和一些UILabel。我需要在选择/突出显示时更改颜色。

1)我应该使用tableviewWillDisplayCell :? 2)如何区分其中选定/突出显示的单元格?

3 个答案:

答案 0 :(得分:1)

您无需执行任何有关发现突出显示/选择的操作。当UITableViewCell被选中时,它会自动突出显示所有子视图(可以突出显示的子视图)。 UILabel 可以突出显示的视图;也就是说,它具有highlighted属性,它会自动响应突出显示。

所以你没有工作要做;你过分思考这个问题。只需设置每个标签的highlightedTextColor属性,一切都会自动发生。另一个答案指出,您可以在笔尖中执行此操作,也可以在代码中执行此操作。

如果在选择单元格时确实需要做一些特殊操作,最简单的方法是使用UITableViewCell子类并覆盖setSelected:animated:。但在你的情况下似乎没有任何需要。

答案 1 :(得分:0)

您可以在笔尖上设置UILabel的高亮颜色。在界面编辑器和右侧面板上选择标签,您应该找到一个更改突出显示颜色的选项(我不在Mac上,因此无法提供更精确的说明)。

如果找不到,只需更改代码的颜色即可。我假设您使用以下内容更改该标签的文本:

myLabel.text = @"something";

只需设置highlightTextColor:

即可
myLabel.highlightedTextColor = [UIColor redColor];

答案 2 :(得分:-1)

首先,你能以正确的方式看到你的细胞吗?如果你确实创建了一个自定义单元格,我将使用它:

    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"MyCustomCell";

        MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


        if (cell == nil) { 
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell"
                                                 owner:self options:nil];
            for (id oneObject in nib) if ([oneObject isKindOfClass:[MyCustomCell class]])
        cell = (MyCustomCell *)oneObject;
        } 

        // Set up the cell
        //...

        return cell;
    }

现在关于你的问题,

1-)当我必须处理uitableviewcell的背景时,使用方法 tableviewWillDisplayCell ,这可能不是你想要的

2-)如果选择一个特定的tableViewCell,它将被选中(默认情况下会将其保留为蓝色),所以如果你只想选择最后一个选中的单元格,你只需要使用它:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    //...

    // do your stuff

}

如果您想使用突出显示方法进行自定义外观,则必须添加         [tableView deselectRowAtIndexPath:indexPath animated:YES]; 到 didSelectRowAtIndexPath ,然后更改tableViewCell的UI。此外,如果您想保存已选择单元格,可以将indexPath.row保存在数据结构(如NSMutableArray)中,您必须在 didSelectRowAtIndexPath 方法中执行该操作

希望这有帮助,如果您需要任何进一步的帮助,请告诉我!

豪尔赫