Restablecimiento de color y fuente de NSTextView después de borrarlo

Establecí una fuente y un color predeterminados en un NSTextView dentro de un NSPanel.

Sin embargo, cuando borro la vista con setString:@"", no solo desaparece el texto, sino también todos los colores/fuentes predeterminados.

Después de hacer otro setString, el texto se convierte en la fuente predeterminada y vuelve a ser negro.

¿Alguien puede explicar por qué es eso y qué puedo hacer para remediarlo?

ACTUALIZADO:

Gracias por la ayuda y la aclaración del problema. Terminé formateándolo nuevamente después de establecer String.

[self.txtLog setFont:[NSFont fontWithName:@"courier" size:12]];
[self.txtLog setTextColor:[NSColor colorWithSRGBRed:65.0/255 green:229.0/255 blue:235.0/255 alpha:1]];

preguntado el 08 de marzo de 13 a las 21:03

1 Respuestas

Esto se debe a que borrar NSTextView y establecer una cadena normal (no atribuida) elimina el formato, que incluye la fuente y el color.

La mayoría de las veces, configuro cadenas atribuidas que formateo usando HTML. Me parece muy conveniente. Por ejemplo, aquí hay dos macros que uso para establecer el color y la fuente:

#define color(string, color)   strAdd5(@"<font color=\"#",(color), @"\">", (string), @"</font>")
#define fontName(string, fontname) strAdd5(@"<span style=\"font-family: ",(fontname), @";\">", (string), @"</span>")
#define html2AttributedString(htmlString) [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]documentAttributes:NULL] autorelease]

Luego, todo lo que necesito es establecer la cadena atribuida en el almacenamiento de texto:

[textStorage setAttributedString:html2AttributedString(color(myNSString, @"FF0000"))]

o para usar insertText de NSTextView

[textView insertText:html2AttributedString(fontName(myNSString, @"Courier New"))];

Y utilizando HTML, puede definir todo, incluido el centrado y muchas otras propiedades. Pero debe convertir cualquier línea nueva en < BR / > antes de convertir el texto.

respondido 08 mar '13, 22:03

A menos que solo esté configurando una parte del texto en textView, le recomiendo usar el método textStorage: me he encontrado con problemas al usar insertText donde el formato de la nueva cadena no se configuró correctamente. - steve

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.