使用自定义字体

时间:2016-05-09 16:10:21

标签: ios uitextview uifont nsmutableattributedstring

我正在使用UITextView,我正在按代码设置字体和属性文本。

案例1: 自定义字体 - 是归属文字 - 否

enter image description here

textView文本以自定义字体显示。

我希望使用自定义字体的属性文本,即消息:,在这种情况下,应该加粗。

案例2: 自定义字体 - 是归属文字 - 是

enter image description here

仅以自定义字体显示属性文本(粗体文字)。

我的代码是:

- (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内容作为属性文本包含在内,但我想在最坏的情况下将其视为一种选择。

2 个答案:

答案 0 :(得分:1)

不要将字体设置在属性文本之外,请尝试在属性字符串中一次设置所有字体更改:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];
[mutAttrTextViewString setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16] range:NSMakeRange(0, _textView.text.length)];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold2];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold3];

[_textView setAttributedText:mutAttrTextViewString];

答案 1 :(得分:1)

有一个相关的问题here 主要问题是font的{​​{1}}(UIFont)属性将应用于其UITextViewtext)属性(也称为“纯文本”) )而不是NSStringattributedText)。

因此,您必须自己将“普通”字体效果应用于NSAttributedString

所以只需替换:

NSAttributedString

使用:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];