NSMutableAttributedString 无法正确设置属性或添加属性

NSMutableAttributedString can't setAttributes or addAttributes correctly

我在下面有一个方法,我想用它来更改 UILabel 文本的最后 6 个字符的颜色,这将是括号中的日期,即 (1999)。首先我设置 tableViewCell 的文本,然后我得到 attributedText 属性 这样我就可以得到 UILabel 文本的字体和大小。我不确定我做错了什么,但现在整个字符串都是黄色的,而不仅仅是标签文本的最后 6 个字符。有什么想法吗?

tableViewCell.titleLabel.text = speech.title;

NSAttributedString *titleAttributedString = tableViewCell.titleLabel.attributedText;
tableViewCell.titleLabel.attributedText = [speech titleAttributedString:titleAttributedString size:tableCell.titleLabel.font.pointSize];

// Speech class instance method
- (NSAttributedString *)titleAttributedString:(NSAttributedString *)attributedString size:(CGFloat)size {
    NSRange range = NSMakeRange(attributedString.length - 6, 6);
    NSMutableAttributedString *titleString = [attributedString mutableCopy];

    NSDictionary *titleAttributesDictionary = [attributedString attributesAtIndex:0 effectiveRange:&range];
    NSDictionary *dateAttributesDictionary  = @{
                                                NSFontAttributeName : titleAttributesDictionary[NSFontAttributeName],
                                                NSForegroundColorAttributeName : [UIColor yellowColor]
                                                };

    // Neither of these lines solves the problem
    // Both titleStrings are yellow
    [titleString setAttributes:dateAttributesDictionary range:range];
    [titleString addAttributes:dateAttributesDictionary range:range];
    [titleString setAttributes:dateAttributesDictionary range:range];

    return titleString;
}

您正在覆盖 attributesAtIndex:effectiveRange: 调用中计算出的 range 值。该调用要求索引 0 处的属性以及这些属性适用的有效范围,即整个字符串。当您对值不感兴趣时​​,只需根据文档将 NULL 传递给 effectiveRange: 参数(您就在索引 0 处的字体之后)。

HTH