2012-01-25 8 views
7

Estoy buscando una técnica confiable para hacer un formato de cadena simple (negrita, cursiva, ...) en un NSTextView. El análisis de texto casi está hecho con expresiones regulares, pero ahora necesito aplicar el rasgo de fuente y también cambiar el tamaño.Técnica sobre cómo formatear/colorear la cadena de NSTextView

Algunos fragmentos de código en la forma en que hago un texto en negrita

[[textView textStorage] beginEditing]; 
[[textView textStorage] applyFontTraits:NSFontBoldTrait range:range]; 
[[textView textStorage] endEditing]; 

esto y también los cambios de tamaño con

[[textView textStorage] beginEditing]; 
NSFont* font = [[textView textStorage] attribute:NSFontAttributeName atIndex:range.location effectiveRange:nil]; 

NSFont* newFont = [NSFont fontWithName:[font familyName] 
            size:[font pointSize] + size]; 

[[textView textStorage] addAttribute:NSFontAttributeName 
           value:newFont 
           range:range]; 
[[textView textStorage] endEditing]; 

funciona bien. El único problema que tengo ahora es que, en algunos casos, cuando escribo nuevos caracteres, esos caracteres aparecen en negrita o cursiva por defecto, aunque no les aplique las propiedades.

¿Tengo que restablecer algo con el setTypingAttributes del NSTextView o simplemente me pierdo algo aquí?

+0

Necesito hacer algo similar. ¿Te importaría decir dónde invocas el código de formato? En mi caso, tengo una vista de texto que usa un enlace, por lo que podría modificarse mediante la edición o un cambio realizado por el controlador subyacente. – paulmelnikow

Respuesta

2

Creo que tiene razón con el enfoque para establecer typingAttributes. Reference for -setTypingAttributes: says

Sin embargo, si agrega acciones de usuario que cambian los atributos de texto, la acción debe usar este método para aplicar esos atributos posteriormente. Las acciones del usuario que cambian los atributos siempre deben establecer los atributos de escritura porque es posible que no haya un cambio posterior en la selección antes del siguiente tipeo.

Eso parece aplicarse en su caso.

No sé si el comportamiento descrito solo es correcto para los editores WYSIWYG como TextEdit. Parece que trabajas en algo que es similar en comportamiento a un editor con resaltado de sintaxis. Ahí realmente nunca desea cambiar los atributos de texto de forma manual, sino más bien en la estructura de una gramática. Probablemente no encaja en ese caso, y debe restablecer typingAttributes o configurarlo de acuerdo con el análisis hasta allí.

+0

Como el efecto no se reprodujo por mi parte, creo que restablecer 'typingAttributes' es el camino a seguir. Volveré a esta respuesta y la marcaré como correcta cuando pueda verificarla. – brutella

+0

Lo probé y funciona para mí. Utilizo el método 'textViewDidChangeSelection:' de 'NSTextViewDelegate' para conectar y llamar' setTypingAttributes: '. Dime si no funciona, luego publicaré el proyecto de ejemplo en alguna parte. – febeling

+0

Aquí hay una esencia con el ejemplo: git: //gist.github.com/1816087.git Escriba la prueba, hágala en negrita con el botón, coloque el cursor dentro de un rango frío, escriba, y es peso de fuente simple. – febeling

Cuestiones relacionadas