objective c - ¿Alguna forma de formar parte de un NSString en negrita?
objective-c ios (9)
Acepté @Jacob Relkin y @Andrew Marin respondieron, de lo contrario, obtuve los bloqueos. 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];
¿Hay alguna manera de poner en negrita solo una parte de una cadena? Por ejemplo:
Distancia aproximada: 120 metros de distancia
¡Gracias!
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];
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];
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);
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))
Si no desea molestarse con las fuentes (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];
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 etiquetas, 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
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.