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
我在下面有一个方法,我想用它来更改 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