【问题标题】:Change UILabel Text color in UItableViewCell更改 UItableViewCell 中的 UILabel 文本颜色
【发布时间】: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 动态绘图。

标签: objective-c cocoa-touch uitableview uilabel


【解决方案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 它也会改变其他单元格的颜色。
猜你喜欢
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多