更改 UItableViewCell 中的 UILabel 文本颜色

Posted

技术标签:

【中文标题】更改 UItableViewCell 中的 UILabel 文本颜色【英文标题】:Change UILabel Text color in UItableViewCell 【发布时间】:2012-06-26 18:35:47 【问题描述】:

我有一个大型自定义UITableView,每行都有UILabels,我想以黑色或绿色显示某些文本。

我用来自NSArrayNSString's 喂细胞。假设我只想将索引30 中的NSString 显示为黑色。

我正在尝试这样的事情,但它不起作用:

NSIndexPath *indexPathWithBlackText = [NSIndexPath indexPathForRow:30 inSection:[indexPath section]];

    if (indexPath.row == indexPathWithBlackText.row)   
        //Label with text in black 
        topLabel.textColor = [UIColor colorWithRed:0.25 green:0.0 blue:0.0 alpha:1.0];
        topLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];
     else 
        //Label with text in green 
        topLabel.textColor = [UIColor colorWithRed:0.122 green:0.467 blue:0.255 alpha:1.00];
    

任何关于正确方向的提示将不胜感激。谢谢!

【问题讨论】:

为什么不这样做 if (indexPath == indexPathWithBlackText) ?您在代码中的哪个位置执行此操作? 我只是想将黑色或绿色的文本标签分配到一个固定的位置,与提供单元格的 NSArray 中的索引相同。问题是,当我滚动 UITableView 时,其他文本也会改变颜色,而不仅仅是我想要的行中的颜色,我认为这是由于 UITableView 动态绘图。 【参考方案1】:

在这个 UITableViewDataSource 委托方法中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

这样写:

if ([self isBlackRow:indexPath.row]) 
    // Your label reference, change color to black here.
 else 
    // Your label reference, change color to green here. 

制作一个方法来判断该行是否为黑色

- (BOOL)isBlackRow:(NSInteger)row 
    NSArray* blackRows = [NSArray arrayWithObjects:[NSNumber numberWithInt:30], [NSNumber numberWithInt:11], nil];

    for (NSNumber* number in blackRows) 
        if (number.intValue == row) 
            return YES;
        
    

    return NO;

【讨论】:

它有效,但仅适用于第 30 行。如果我想要不同的行,如 3、6、11、19 怎么办? 那行得通。我必须想办法制作 ||声明是动态的,因为它们可能会有所不同,并且它们会以 NSNumber 的 NSArray 形式出现在我面前...... 它最初可以工作,但是当我滚动 UITableView 时,其他文本也会改变颜色,而不仅仅是我想要的行中的颜色,我认为这是由于 UITableView 动态绘图。感谢您指出方向! 现在一切正常!!!我只是改变了我正在绘制单元格的地方!!!!非常感谢你挽救了一天!!!! 只有一个小细节,而不是 : 它应该在你的 for (NSNumber* number : blackRows) 迭代中。再次感谢!【参考方案2】:
 if (indexPath.row > 29)   
    //Label with text in black 
    topLabel.textColor = [UIColor colorWithRed:0.25 green:0.0 blue:0.0 alpha:1.0];
    topLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];
 else 
    //Label with text in green 
    topLabel.textColor = [UIColor colorWithRed:0.122 green:0.467 blue:0.255 alpha:1.00];

【讨论】:

它有效,但仅适用于第 30 行。如果我想要不同的行,如 3、6、11、19 怎么办? 我认为它的工作行数会大于 30 。它只适用于第 30 行吗? 是的,Andreas 提供的验证有助于解决更多随机行的问题。谢谢!【参考方案3】:

如何将标签添加到表格视图中?

可能是您没有引用正确的对象。

【讨论】:

问题是每次我滚动 UITableView 它也会改变其他单元格的颜色。

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

更改 UITableViewCell 中的删除附件视图

IOS - UIView中使用AutoLayout的UILabel动态高度

更改 uitableviewcell 中的自定义附件视图?

根据 `UITableViewCell` 中的 `UILabel` 文本更改 `UIView` 宽度

从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?

更改 UItableViewCell 中的 UILabel 文本颜色