Tengo una etiqueta (NSTextField) en IB que está vinculada a un controlador. El controlador, en awakeFromNIB, establece el attributeStringValue de la etiqueta para que contenga texto coloreado y un enlace o dos.La cadena atribuida de NSTextField se retrasa en la representación
Cuando ve la etiqueta, contiene el valor de cadena correcto, pero parte del formato se pierde, hasta que hace clic en la etiqueta y se actualiza para contener el formato correcto.
Estoy usando este código para establecer el valor:
[self.testTextField setAllowsEditingTextAttributes:YES];
[self.testTextField setSelectable:YES];
NSMutableAttributedString *linkString = [[NSMutableAttributedString alloc] initWithString:@"hit this "];
[linkString beginEditing];
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"link"];
NSRange range = NSMakeRange(0, [attrString length]);
[attrString addAttribute:NSLinkAttributeName value:[[NSURL URLWithString:@"http://google.com"] absoluteString] range:range];
[attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlinePatternDot] range:range];
[attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blackColor] range:range];
[linkString appendAttributedString:attrString];
[linkString appendAttributedString:[[NSAttributedString alloc] initWithString:@" to search"]];
[linkString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0, [linkString length])];
[linkString endEditing];
[self.testTextField setAttributedStringValue:linkString];
Sobre la base de este ejemplo, verá la cadena de color rojo y en el tipo de letra predeterminado de etiquetas. Luego, cuando hace clic en la etiqueta, la fuente cambia de tamaño y rostro y el enlace se representa mágicamente.
¿Alguna idea sobre cómo hacer que la cuerda se procese correctamente la primera vez?
No es necesario llamar '' beginEditing' y endEditing' cuando se está construyendo un atribuirán cuerda. Estos métodos son solo para usar cuando la cadena se monitorea en busca de cambios, como 'NSTextStorage' para' NSTextView'. –
Además, dice que el campo de texto está "vinculado" al controlador. El uso de la palabra "obligado" implica que está utilizando enlaces de cacao, pero parece que no lo está, ya que está configurando el valor del campo de texto mediante programación. ¿El enlace 'attributedStringValue' del campo de texto está vinculado a algo? –
@RobKeniger Es un IBOutlet 'obligado' (¿cuál es el término correcto para eso?) – d2kagw