2016-05-09 19 views
1

Ich verwende UITextView und ich setze seine Schriftart und attributierten Text nach Code.UITextView attributierte Text funktioniert nicht, wenn benutzerdefinierte Schriftart verwendet

Fall 1:Gewohnheit-Schriftart - JA, attribtued Text - NO

enter image description here

Der Textview Text in benutzerdefinierter Schriftart angezeigt.

Ich möchte den attributierten Text mit benutzerdefinierten Schriftart, d. H. Nachricht: in diesem Fall shold fett werden.

Fall 2:Gewohnheit-Schriftart - JA, attribtued Text - JA

enter image description here

Nur der attribtued Text (Bold Text) in benutzerdefinierter Schriftart angezeigt.

Der Code, den ich habe, ist:

- (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]; 
} 

Wenn ich die Linie setAttributedText:mutAttrTextViewString Kommentar, evrything wird in benutzerdefinierter Schriftart angezeigt. Wenn ich es auskommentiere, wird nur der zugeordnete Text in einer benutzerdefinierten Schriftart angezeigt, und der Rest wird in der Standardschrift angezeigt.

Warum passiert das? Wenn das nicht möglich ist, denke ich, HTML-Inhalt als den attributierten Text aufzunehmen, aber ich möchte das als eine Option im schlimmsten Fall betrachten.

+1

'NSMutableAttributedString * mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString: _textView.text Attribute: @ {NSFontAttributeName: [UIFont font: @“ BurbankSmall-Medium "Größe: 16]}];'? Wenn Sie 'mutAttrTextViewString' mit Ihrem aktuellen Code protokollieren, sollten Sie sehen, dass es nicht die Schriftart für den Rest des Textes hat (wo Sie die fette Schrift nicht eingefügt haben) und die Schriftart nicht standardmäßig erhalten muss set in '_textView' für * PLAIN text *. – Larme

+0

Ich habe die Schriftart für die Textansicht festgelegt, und warum verwendet der mutAttrTextViewString die textView-Schriftart [email protected] –

+0

Ich habe nicht gesagt, dass es Ihre gesamte Verwendung von mutAttrTextViewString ersetzen sollte. Es ist nur diese Zeile 'NSMutableAttributedString * mutAttrTextViewString = [[NSMutableAttributedString Alloc] initWithString: _textView.text];'. Für den Rest rufen Sie weiterhin '[mutAttrTextViewString setAttributes: dictBoldText range: rangeBold];' und die zwei anderen Zeilen auf. – Larme

Antwort

1

Es gibt eine ähnliche Frage here.
Das Hauptproblem ist, dass font (UIFont) Eigentum von UITextView für seine text (NSString) Eigenschaft (auch als „Klartext“) und nicht für die attributedText (NSAttributedString) aufgebracht werden soll.

Sie müssen also den "normalen" Font-Effekt auf Ihre NSAttributedString selbst anwenden.

So einfach ersetzen:

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

mit:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}]; 
1

Statt die Schrift außerhalb des zugeschrieben Text zu setzen, versuchen innerhalb der Zeichenfolge auf einmal zugeschrieben alle Schrift ändert sich die Einstellung:

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];