1

UILabel 是在 Interface builder 中创建的。它是 UITableViewCell 的一部分。它的颜色在 Interface Builder 中设置为红色。

我在这里创建单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"notationcell";
    NotationCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    cell.notation = [self.notations objectAtIndex:indexPath.row];

    UIColor *before = cell.symbolLabel.textColor;
    cell.symbolLabel.text = @"new text";
    UIColor *after = cell.symbolLabel.textColor;

    return cell;
}

之前是红色的,如预期的那样。但是更改文本后颜色变为 UIDeviceWhiteColorSpace 0 1,文本变为黑色。我正在使用自动布局。

为什么更改文本意味着更改其颜色?

4

2 回答 2

1

找到了解决方案。我创建了一个类别:

@implementation UILabel (KeepAttributes)

- (void)setTextWithKeepingAttributes:(NSString *)text{

    NSDictionary *attributes = [(NSAttributedString *)self.attributedText attributesAtIndex:0 effectiveRange:NULL];
    self.attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes];

}

@end

然后使用此方法更改文本。

于 2013-06-21T11:04:34.937 回答
0

如果您希望文本颜色永久为红色,请尝试在委托方法本身而不是 XIB 中设置标签的文本颜色:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"notationcell";
    NotationCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    cell.notation = [self.notations objectAtIndex:indexPath.row];

    cell.symbolLabel.text = @"new text";
    cell.symbolLabel.textColor = [UIColor RedColor];

    return cell;
}
于 2013-06-21T11:31:33.003 回答