在自定义UITableViewCell iphone中更改文本颜色

时间:2010-05-19 00:58:11

标签: iphone ipad uitableview

我有一个自定义单元格,当用户选择该单元格时,我希望两个UILabel中的文本更改为浅灰色。

ChecklistCell.h:

#import <UIKit/UIKit.h>


@interface ChecklistCell : UITableViewCell {
    UILabel *nameLabel;
    UILabel *colorLabel;
    BOOL selected;


}

@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@property (nonatomic, retain) IBOutlet UILabel *colorLabel;



@end

ChecklistCell.m:

#import "ChecklistCell.h"


@implementation ChecklistCell
@synthesize colorLabel,nameLabel;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
        // Initialization code
    }
    return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


- (void)dealloc {
    [nameLabel release];
    [colorLabel release];
        [super dealloc];
}


@end

5 个答案:

答案 0 :(得分:13)

由于您使用的是自定义表格单元格,因此可以通过在自定义UITableViewCell中实现setSelected和setHighlighted方法来实现代码来设置标签颜色。这将从选择中捕获所有状态更改,尽管存在一些棘手的情况,例如当您选择并在单元格已经被选中后拖动到单元外时,使用NO调用setHighlighting时。这是我使用的方法,我认为在所有情况下都适当地设置颜色。

- (void)updateCellDisplay {
    if (self.selected || self.highlighted) {
        self.nameLabel.textColor = [UIColor lightGrayColor];
        self.colorLabel.textColor = [UIColor lightGrayColor];
    }
    else {
        self.nameLabel.textColor = [UIColor blackColor];
        self.colorLabel.textColor = [UIColor blackColor];
    }
}

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];
    [self updateCellDisplay];
}

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

答案 1 :(得分:5)

didSelectRowAtIndexPath方法中,拨打电话获取当前单元格并进行相应更新:

CheckListCell* theCell = (CheckListCell*)[tableView cellForRowAtIndexPath:indexPath];
theCell.nameLabel.textColor = [UIColor lightGrayColor];
theCell.colorLabel.textColor = [UIColor lightGrayColor];

答案 2 :(得分:0)

tableView:didSelectRowAtIndexPath:中记录所选单元格的索引路径。在tableView:cellForRowAtIndexPath:中,只需检查它是否与您保存的索引路径匹配,然后相应地设置文本颜色。我不完全确定在选择后是否重新绘制了单元格,因此您可能需要reloadData选择,但如果您正在缓存单元格/遵循正常单元格绘制最佳实践,则应该足够快。

或者reloadRowsAtIndexPaths:withRowAnimationUITableViewRowAnimationNone一起使用。但是,您需要跟踪您在灰色文本中绘制的最后一个单元格,并以简单的方式重绘它。

答案 3 :(得分:0)

我对此进行排序的方式是在“didSelectRowAtIndexPath:”循环遍历tableView的所有子视图,并将所有文本标签设置为默认颜色,如下所示:

for(CustomTableViewCell *tableCell in [tableView subviews]) {
    if([tableCell isKindOfClass:[UITableViewCell class]]) {
        [tableCell.textLabel setTextColor: [UIColor blackColor]];
    }
}

....然后将选定的表格单元格设置为白色。

[[tableView cellForRowAtIndexPath:indexPath].textLabel setTextColor: [UIColor whiteColor]];

答案 4 :(得分:0)

这很简单,你只需要使用这个(下面)方法,这里我设置备用单元格颜色

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row%2 == 0) 
    {
         tCell.cellLabel.textColor = [UIColor grayColor];
    }
    else
    {
         tCell.cellLabel.textColor = [UIColor blackColor];
    }
}

PS-无需使用 cellForRowAtIndexPath:方法更改 cellText Propties ..