2016-05-09 5 views
1

UITextViewを使用しています。フォントと属性付きテキストをコードで設定しています。UITextViewがカスタムフォントを使用しているときに属性付きテキストが機能しない

ケース1:カスタムフォント - YES、attribtuedテキスト - NO

enter image description here

のTextViewのテキストはカスタムフォントで表示されます。

帰属テキストをカスタムフォントで入力したい場合。メッセージ:この場合はが太字で表示されます。

ケース2:カスタムフォント - YESattribtuedテキスト -

enter image description here

のみattribtuedテキスト(太字)YESは、カスタムフォントで表示されます。

私が持っているコードは次のとおりです。

- (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コンテンツを属性付きテキストとして含めることを検討していますが、最悪の場合、これをオプションとして考慮する必要があります。

+1

'NSMutableAttributedString * mutAttrTextViewString = [[NSMutableAttributedStringのalloc] initWithString:_textView.text属性:[UIFont fontWithName::{NSFontAttributeName @ @」 BurbankSmall-Medium "size:16]}];'?あなたの現在のコードで 'mutAttrTextViewString'をログすると、テキストの残りの部分(太字のフォントを置かなかった部分)のフォントがなく、デフォルトでフォントを取得する必要はありません* PLAINテキスト*の '_textView'で設定します。 – Larme

+0

私はテキストビューのフォントを設定しましたが、なぜmutAttrTextViewStringがtextViewフォントを使用していないのですか?@Larme –

+0

私はそれがあなたの全部のmutAttrTextViewStringの使用を置き換えるべきではないと言いました。 'NSMutableAttributedString * mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];'という行だけです。残りの部分については、 '[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold];'と他の2行を呼び出しています。 – Larme

答えて

1

関連する質問hereがあります。
主な問題は、UITextViewfontUIFont)プロパティは(も「プレーンテキスト」という名前の)そのtextNSString)プロパティのためではなくattributedTextNSAttributedString)に適用されるべきであることです。

あなたはNSAttributedStringに「通常の」フォントエフェクトを適用する必要があります。

はだから置き換える:

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

で:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}]; 
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]; 
関連する問題