it-swarm.com.de

Irgendeine Möglichkeit, einen Teil eines NSStrings fett zu machen?

Gibt es eine Möglichkeit, nur einen Teil einer Zeichenfolge fett darzustellen? Zum Beispiel:

Ungefähre Entfernung: 120m weg

Vielen Dank!

71
Zhen

Was Sie könnten tun, ist eine NSAttributedString .

NSString *boldFontName = [[UIFont boldSystemFontOfSize:12] fontName];
NSString *yourString = ...;
NSRange boldedRange = NSMakeRange(22, 4);

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];

[attrString beginEditing];
[attrString addAttribute:kCTFontAttributeName 
                   value:boldFontName
                   range:boldedRange];

[attrString endEditing];
//draw attrString here...

Werfen Sie einen Blick auf diese praktische Dandy-Anleitung , um NSAttributedString-Objekte mit Kerntext zu zeichnen.

95
Jacob Relkin

Wie Jacob erwähnt hat, möchten Sie wahrscheinlich eine NSAttributedString oder eine NSMutableAttributedString verwenden. Das Folgende ist ein Beispiel, wie Sie dies tun könnten.

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Approximate Distance: 120m away"];
NSRange selectedRange = NSMakeRange(22, 4); // 4 characters, starting at index 22

[string beginEditing];

[string addAttribute:NSFontAttributeName
           value:[NSFont fontWithName:@"Helvetica-Bold" size:12.0]
           range:selectedRange];

[string endEditing];
60
Chris Frederick

Wenn Sie sich nicht mit Schriftarten beschäftigen möchten (da nicht jede Schriftvariante "Fett" enthält), können Sie dies auf andere Weise tun. Bitte beachten Sie, dass dies derzeit nur unter OS X verfügbar ist ...:

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"];
[attrString beginEditing];
[attrString applyFontTraits:NSBoldFontMask
                      range:NSMakeRange(22, 4)];
[attrString endEditing];
10
yura

Der obige Code hat mich abgestürzt, als ich UILabel mit diesem attributedString erstellt habe.

Ich habe diesen Code verwendet und es hat funktioniert:

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
NSRange boldedRange = NSMakeRange(0, 1);
UIFont *fontText = [UIFont systemFontOfSize:12]; //[UIFont fontWithName:@"Lato-Bold" size:12];
NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil];
[attrString setAttributes:dictBoldText range:boldedRange];
6
Andrew Marin

Swift

Enthält auch den Bereich der Zeichenfolge, die Sie dynamisch hervorheben möchten

let nameString = "Magoo"
let string = "Hello my name is \(nameString)"

let attributes = [NSFontAttributeName:UIFont.systemFontOfSize(14.0),NSForegroundColorAttributeName: UIColor.black]
let boldAttribute = [NSFontAttributeName:UIFont.boldSystemFontOfSize(14.0)]

let attributedString = NSMutableAttributedString(string: string, attributes: attributes)

let nsString = NSString(string: string)
let range = nsString.rangeOfString(nameString)

if range.length > 0 { attributedString.setAttributes(boldAttribute, range: range) }

someLabel.attributedText = attributedString
4
Magoo

Um eine Zeichenfolge fett darzustellen, ohne die Schriftart fest zu codieren, können Sie das StrokeWidth-Attribut mit einem negativen Wert verwenden:

let s = NSMutableAttributedString(string: "Approximate Distance: 120m away")
s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
4
Yonat

Eine NSString ist nur ein Datencontainer. Es enthält keine Details zu den Anliegen der Präsentation. 

Es klingt wie das, was Sie wahrscheinlich tun möchten, ist ein fetter Teil der UILabel, die zur Anzeige Ihrer Zeichenfolge verwendet wird. Was ich nicht glaube, kannst du tun. Sie können die Benutzeroberfläche jedoch immer in drei Labels unterteilen, eines für "Approximate Distance:", eines für "120 m" und eines für "Away". Platzieren Sie sie in einer Linie und Sie sollten den gewünschten Effekt erzielen.

Eine andere Option könnte darin bestehen, eine UIWebView und ein wenig Markup zu verwenden, um Ihre Zeichenfolge mit eingebetteten Formatierungsinformationen anzuzeigen, wie hier beschrieben: 

http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview

3
aroth

In Xamarin ios können Sie einen Teil eines NSStrings folgendermaßen darstellen:

public static NSMutableAttributedString BoldRangeOfString (string str, float fontSize, int startRange, int lengthRange)
    {
        var firstAttributes = new UIStringAttributes {
            Font = UIFont.BoldSystemFontOfSize(fontSize)
        };

        NSMutableAttributedString boldString = new NSMutableAttributedString (str);
        boldString.SetAttributes (firstAttributes.Dictionary, new NSRange (startRange, lengthRange));
        return boldString;
    }    

und rufen Sie diese Methode auf:

myLabel = new UILabel (); 
...
myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);    
2
Adi Rabi

Ich habe @Jacob Relkin und @Andrew Marin antwortet, sonst habe ich die Abstürze bekommen. Hier ist die Antwort für iOS9:

UIFont *boldFont = [UIFont boldSystemFontOfSize:12];
NSString *yourString = @"Approximate Distance: 120m away";
NSRange boldedRange = NSMakeRange(22, 4);

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString];

[attrString beginEditing];
[attrString addAttribute:NSFontAttributeName 
                   value:boldFont
                   range:boldedRange];

[attrString endEditing];

Ich habe mir die offizielle Dokumentation angesehen: 1 und 2 .

2

Wenn Sie die Schriftart und/oder die Größe nicht fest codieren möchten, versuchen Sie diesen Code, um volle Strings darzustellen:

NSMutableAttributedString *myString = [[NSMutableAttributedString alloc] initWithString:mainString];
[myString beginEditing];
[myString addAttribute:NSStrokeWidthAttributeName
                         value:[[NSNumber alloc] initWithInt: -3.f]
                         range:NSMakeRange(0, [mainString length])];
[myString endEditing];
0
oskarko