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

Posted

技术标签:

【中文标题】更改自定义 UITableViewCell iphone中的文本颜色【英文标题】:changing text color in custom UITableViewCell iphone 【发布时间】:2010-05-19 00:58:11 【问题描述】:

我有一个自定义单元格,当用户选择该单元格时,我希望两个 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

【问题讨论】:

【参考方案1】:

由于您使用的是自定义表格单元格,因此您可以通过在自定义 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];

【讨论】:

【参考方案2】:

在您的didSelectRowAtIndexPath 方法中,调用以获取当前单元格并进行相应更新:

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

【讨论】:

这很好用,除了当我滚动离开修改过的单元格,然后向后滚动时,单元格又回到了它的原始状态。所以我假设我必须跟踪哪些单元格在其他地方被修改?我猜要保留一个已修改的 indexPaths 数组,然后在 cellForRowAtIndexPath 方法中检查该索引路径的数组?还是有更简单的方法? 当然,现在我正在尝试这样做,我认为没有简单的方法来比较两个 indexPaths.... 是的,您确实应该同时更新您的数据源。我所描述的实际上只是为了获得即时视觉更新。我假设您有一个对象数组,您将其用作表的数据源?您可以向对象添加一个属性以定义它是否被选中,在 didSelectRowAtIndexPath 方法(以及上面的代码)中更新它,并使用它来确定 cellForRowAtIndexPath 方法中的 textColor。希望这很清楚! 是的,这很清楚,但是对于这个表,如果不重做所有事情,我就不能像这样对数据源做任何事情。相反,我制作了一系列索引路径,并创建了一个循环,将索引路径与该数组中的所有索引路径进行比较。不确定这是否可行。当我尝试向 mutablearray 添加索引路径时,没有任何反应,并且显示数组内容的 NSLOG 始终显示 null,即使在据称成功的 addObject:indexPath] 之后也是如此。是不可能将索引路径添加到数组中还是我只是做错了什么(再次,大声笑) 你分配/初始化数组了吗?【参考方案3】:

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

或者使用reloadRowsAtIndexPaths:withRowAnimationUITableViewRowAnimationNone。但是您需要跟踪最后一个以灰色文本绘制的单元格,并以普通样式重新绘制它。

【讨论】:

【参考方案4】:

我的排序方式是在“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]];

【讨论】:

正如你所看到的,当我循环浏览时,我检查了子视图是否是 UITableViewCell 的一种,如果是,则只更改颜色。希望这会有所帮助!【参考方案5】:

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

-(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 属性..

【讨论】:

以上是关于更改自定义 UITableViewCell iphone中的文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

在运行时无法更改和自定义自定义 UITableViewCell 中的 UIButtons 的标题

根据视图更改自定义 UITableViewCell 高度

方向更改时自定义UITableViewCell自动布局问题

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

iOS:在自定义 UITableViewCell 中更改 contentView backgroundColor on touchDown

UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度