79 votes

Une manière audacieuse de faire partie d'un NSString?

Existe-t-il un moyen de mettre en gras uniquement une partie d'une chaîne? Par exemple:

Distance approximative: 120m

Merci!

103voto

Jacob Relkin Points 90729

Ce que vous pourriez faire est d'utiliser un 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...
 

Jetez un coup d'œil à ce guide pratique pour dessiner des objets NSAttributedString avec Core Text.

62voto

Chris Frederick Points 2833

Comme Jacob l'a mentionné, vous voudrez probablement utiliser un NSAttributedString ou un NSMutableAttributedString . Voici un exemple de la façon dont vous pourriez le faire.

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

14voto

yura Points 36

Si vous ne voulez pas vous soucier des polices (comme chaque variante de police ne contient pas "Gras"), voici une autre façon de procéder:

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

2voto

aroth Points 28424

Un NSString est juste un conteneur de données. Il ne contient pas tous les détails à propos de la présentation de ses préoccupations.

Il semble que vous vous voulez probablement faire est en gras une partie de l' UILabel qui est utilisé pour l'affichage de votre chaîne. Ce que je ne pense pas que vous pouvez faire. Mais vous pouvez toujours casser l'INTERFACE utilisateur en trois étiquettes, une pour "Distance Approximative:", une pour "120 m"et un pour "l'ailleurs". Placez-les en ligne les uns avec les autres et vous devriez obtenir l'effet désiré.

Une autre option pourrait être d'utiliser un UIWebView et un peu de balisage pour afficher votre texte avec mise en forme incorporée de l'information, comme expliqué ici:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X