更改 UItableViewCell 中的 UILabel 文本颜色
Posted
技术标签:
【中文标题】更改 UItableViewCell 中的 UILabel 文本颜色【英文标题】:Change UILabel Text color in UItableViewCell 【发布时间】:2012-06-26 18:35:47 【问题描述】:我有一个大型自定义UITableView
,每行都有UILabels
,我想以黑色或绿色显示某些文本。
我用来自NSArray
的NSString'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 文本颜色的主要内容,如果未能解决你的问题,请参考以下文章
IOS - UIView中使用AutoLayout的UILabel动态高度
根据 `UITableViewCell` 中的 `UILabel` 文本更改 `UIView` 宽度