UILabel带有属性文本问题

时间:2014-04-05 17:27:45

标签: ios uitableview nsattributedstring

我遇到将自定义UILabel放置在自定义表格视图单元格中的问题。 我有一个包含atrtributed标签的自定义单元格。我正在从代码中分配属性文本:

self.paymentLabel.attributedText = attributedString;

当我通过选择其中一个单元格导航到下一个屏幕时,所有单元格中的所有属性标签都将重置。

我尝试在单元格内的-layoutSubviews方法中重新加载属性字符串,但它没有帮助。有一点有帮助的是在tableView中重新加载数据,但它肯定只是解决方法。

有谁知道会出现什么问题?

3 个答案:

答案 0 :(得分:1)

看起来这个问题并没有与attributionText真正联系,而是与标签的处理方式有关。要检查这一点,您可以在现在设置attributedText的相同代码处设置标签背景颜色,并在“选择其中一个单元格”之后检查颜色是否相同。

答案 1 :(得分:1)

执行此操作的一种方法是在即将显示单元格时设置属性。这是我用来动态更改单元格中的属性文本的示例。它需要找到可以通过标记它来完成的UILabel(Interface Builder中的999)。

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if( indexPath.row == 3 || indexPath.row == 4 || indexPath.row == 5 )
    {
        UILabel * label = (UILabel *)[cell viewWithTag:999];
        NSRange range = [label.attributedText.string rangeOfString: @"®"];
        if (range.length)
        {
            UIFont * font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:12.0];
            NSDictionary * attributes = @{
                                          NSFontAttributeName: [font fontWithSize: 10],
                                          NSBaselineOffsetAttributeName : @10
                                          };
            NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString: label.attributedText.string];
            [string setAttributes: attributes range:range];
            label.attributedText = string;
        }
    }
}

答案 2 :(得分:0)

tableView的单元格正在被回收。如果您在代码中分配文本,那么当单元格离开屏幕时它将会消失。

我要做的第一件事是在 cellForRowAtIndexPath 方法上分配文本。如果您只希望该单元格具有该文本,则可以将其转换为if语句:

if (indexPath.section==0 && indexPath.row==0){

    cell.paymentLabel.attributedText = attributedString;

}

没有关于如何实现tableView的更多详细信息,我无能为力。