【发布时间】:2016-09-04 08:52:16
【问题描述】:
我正在使用UITextView,并通过代码设置其字体和属性文本。
案例 1: 自定义字体 - 是,属性文本 - 否
textView 文本以自定义字体显示。
我想要带有自定义字体的属性文本,即 Message : 在这种情况下应该加粗。
案例 2: 自定义字体 - 是,属性文本 - 是
只有属性文本(粗体文本)以自定义字体显示。
我的代码是:
- (void)loadTextView
{
_textView.text=NSLocalizedString(@"more_info_text",nil);
_textView.font=[UIFont fontWithName:@"BurbankSmall-Medium" size:16];
NSRange rangeBold = [_textView.text rangeOfString:@"Examples of invalid characters:"];
NSRange rangeBold2 = [_textView.text rangeOfString:@"Restricted text:"];
NSRange rangeBold3 = [_textView.text rangeOfString:@"Message :"];
UIFont *fontText = [self boldFontWithFont:_textView.font];
NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil];
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold2];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold3];
[_textView setAttributedText:mutAttrTextViewString];
_textView.editable=NO;
_textView.selectable=NO;
}
- (UIFont *)boldFontWithFont:(UIFont *)font
{
UIFontDescriptor * fontD = [font.fontDescriptor
fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
return [UIFont fontWithDescriptor:fontD size:16];
}
当我评论 setAttributedText:mutAttrTextViewString 行时,evrything 会以自定义字体显示。当我取消注释时,只有属性文本以自定义字体显示,其余以默认字体显示。
为什么会这样?如果这是不可能的,我正在考虑将 html 内容作为属性文本包含在内,但我想在最坏的情况下将其视为一个选项。
【问题讨论】:
-
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}];?如果您使用当前代码记录mutAttrTextViewString,您应该看到它没有其余文本的字体(您没有放置粗体字体)并且默认情况下不必获取字体在_textView中设置纯文本。 -
我确实为文本视图设置了字体,为什么 mutAttrTextViewString 不采用 textView 字体? @Larme
-
我没有说它应该取代您对
mutAttrTextViewString的全部使用。就是那行NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];。其余的,您继续拨打[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold];和另外两条线路。 -
出于同样的原因:stackoverflow.com/questions/36064762/…(参见 @matt 的 评论)。
font的UITextView属性是它的text属性(通常所说的纯文本),而不是它的attributedText属性。 -
您想将该评论作为答案吗? @Larme 它奏效了。很奇怪,我们需要为可变字符串重新指定属性。
标签: ios uitextview uifont nsmutableattributedstring