¿Alguna forma de formar parte de un NSString en negrita?

¿Hay alguna manera de poner en negrita solo una parte de una cadena? Por ejemplo:

Distancia aproximada: 120 metros de distancia

¡Gracias!

Lo que podrías hacer es usar 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... 

Eche un vistazo a esta útil guía dandy para dibujar objetos NSAttributedString con Core Text.

Como mencionó Jacob, es probable que desee utilizar un NSAttributedString o un NSMutableAttributedString . El siguiente es un ejemplo de cómo puedes hacer esto.

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

Si no desea molestarse con las fonts (ya que no todas las variaciones de la fuente contienen “Negrita”), aquí hay otra forma de hacerlo. Tenga en cuenta que actualmente solo está disponible en OS X …

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

El código anterior me dio un error cuando creé UILabel con este attributeString.

Usé este código y funcionó:

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

Para poner en negrita una cadena sin codificar de forma rígida su fuente, puede usar el atributo StrokeWidth con un valor negativo:

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

Un NSString es solo un contenedor de datos. No contiene ningún detalle sobre las preocupaciones de presentación.

Parece que lo que probablemente quieras hacer es una parte audaz de UILabel que se usa para mostrar tu cadena. Lo cual no creo que puedas hacer Pero siempre puedes dividir la IU en tres tags, una para “Distancia aproximada:”, una para ” 120 m ” y una para “lejos”. Colóquelos en línea el uno con el otro y obtendrá el efecto deseado.

Otra opción podría ser utilizar UIWebView y un poco de marcado para mostrar su cadena con información de formato incrustada, como se explica aquí:

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

Rápido

También incluye obtener el rango de la cadena que desea envalentonar dinámicamente

 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 

En Xamarin iOS puedes en negrita parte de un NSString de esta manera:

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

y llama a este método:

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

Acepté @Jacob Relkin y @Andrew Marin respondieron, de lo contrario, obtuve los lockings. Aquí está la respuesta para 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]; 

Eché un vistazo a la documentación oficial: 1 y 2 .