¿Hay alguna manera de poner en negrita solo una parte de una cadena? Por ejemplo:¿Alguna manera de formar parte de un NSString en negrita?
Distancia aproximada: 120m de distancia
Gracias!
¿Hay alguna manera de poner en negrita solo una parte de una cadena? Por ejemplo:¿Alguna manera de formar parte de un NSString en negrita?
Distancia aproximada: 120m de distancia
Gracias!
Lo que podría 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...
Tome un vistazo a this handy dandy guide a dibujar objetos con NSAttributedString
Core texto.
¿Alguien puede decirme qué se define como "kCTFontAttributeName"? – Sohan
Vaya. simplemente pensé que es una constante que se define en CTFont.h en su marco CoreText. – Sohan
dice: Uso del identificador indefinido 'kCTFontAttributeName', ¿quiso decir 'NSFontAttributeName'? ¿Qué pasa con eso? ¿Puedo usar NSFontAttributeName en su lugar? – tester
Un NSString
es solo un contenedor de datos. No contiene ningún detalle sobre las preocupaciones de presentación.
Parece que lo que probablemente quiera hacer es audaz parte del UILabel
que se está utilizando para mostrar su cadena. Lo cual no creo que puedas hacer Pero siempre puede dividir la IU en tres etiquetas, una para "Distancia aproximada:", una para "120 m", y una para "distancia". Colóquelos en línea el uno con el otro y obtendrá el efecto deseado.
Otra opción podría ser usar un UIWebView
y un poco de margen de beneficio para mostrar su cadena con información de formato embebido, como se discute aquí:
http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview
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];
Cuando intento esto, obtengo 'Uso del identificador no declarado 'NSFont'' en la línea' value: '. ¿Cómo puedo solucionar esto? – ZuluDeltaNiner
Este es un gran ejemplo. Te falta un '@' alrededor de la cadena de ejemplo después de tu método 'initWithString:' en la primera línea. :) –
@ZuluDeltaNiner Si está usando iOS, reemplace 'NSFont' con' UIFont' –
Si no quiere preocuparse por las fuentes (ya que no todos variación de fuente contiene "Bold"), aquí es otra manera de hacerlo. Tenga en cuenta, esto es actualmente sólo 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];
¿NSBoldFontMask no está declarado para iOS? Cualquier reemplazo? – coolcool1994
@ coolcool1994 - Lo siento, no es que yo sepa. Editaré mi respuesta para aclarar que este es solo el truco de OS X ... – yura
En ios Xamarin puede negrita dentro de un NSString 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 llamar a este método:
myLabel = new UILabel();
...
myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange);
La pregunta no era sobre Xamarin. –
Xamarin funciona con el mismo objeto NSString, la pregunta no especificaba en qué idioma debería estar la respuesta. Vine aquí buscando la sintaxis de Xamarin para hacer esto. Respuesta válida – root
El código anterior me dio un error cuando creé UILabel con este attributeString.
que utiliza 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];
Gracias @ Andrew Marin. –
me acoplada @Jacob Relkin y respuestas @ Andrew Marin, de lo contrario, tengo los accidentes. 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];
Swift
también incluye recibir 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
Para una cadena negrita y sin codificar su fuente, se puede utilizar el anchoTrazo atributo con un valor negativo :
let s = NSMutableAttributedString(string: "Approximate Distance: 120m away")
s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))
Depende de en qué lo muestre, porque una cadena es solo una serie de caracteres y no contiene f información de ormatting. – BoltClock