Tengo un MSMutableAttributedString displayContent. Los atributos del contenido varían a través de la cadena , es decir, los colores y tamaños de letra pueden variar por letra.appendAttributedString: en NSMutableAttributedString
Quiero agregar un nuevo carácter al final de la cadena y que recoja los atributos del último carácter en displayContent. No puedo saber cuáles son esos atributos de antemano ya que están bajo el control del usuario.
Cuando añado el nuevo carácter (tempAttr):
NSAttributedString * tempAttr = [[NSAttributedString alloc] initWithString:appendage];
[displayContent appendAttributedString:tempAttr];
aparece para restablecer los atributos de toda la cadena de los atributos del nuevo personaje (que yo no he puesto ya que no puede saber lo que necesitan ser).
¿Cómo consigo que TempAttr recoja los atributos del último carácter en displayContent? Gracias.
Actualizar. Hizo progresos en esto de una manera torpe pero funcional. Copiar los atributos Diccionario del último carácter en la pantalla (displayContent) y luego volver a aplicar esos atributos al nuevo personaje que se añade:
NSMutableDictionary * lastCharAttrs = [NSMutableDictionary dictionaryWithCapacity:5];
[lastCharAttrs addEntriesFromDictionary: [displayContent attributesAtIndex:0
effectiveRange:NULL]]; // get style of last letter
NSMutableAttributedString * tempAttr = [[NSMutableAttributedString alloc] initWithString:newCharacter
attributes:lastCharAttrs];
[displayContent appendAttributedString:tempAttr]; // Append to content in the display field
yo habría esperado que hubiera una manera más elegante de hacer esto como el establecimiento de una propiedad de NSTextField.
Muchas gracias por el mensaje. Sustituí tu línea en el código y funcionó bien. Gracias. ¿Alguna idea de por qué esto funciona? El método mutableString devuelve simplemente el contenido de la cadena atribustring. El Doc no menciona nada sobre los atributos que se copiaron. Por lo tanto, no veo de dónde provienen los atributos de apenddedString. –
No tengo ni idea. No puedo decidir si se trata de un detalle de implementación (es decir, un efecto/comportamiento secundario que puede cambiar) o si se trata de un comportamiento intencionado real. Pero al pensar en ello en oposición a "appendAttributedString:" que obviamente tiene sus propios atributos, pude ver el razonamiento de que extender la cadena subyacente debería hacer que los atributos se transfirieran. Dicho esto, cómo está realmente conectado, no tengo ni idea. –
@BenCochran Tienes razón en que no se menciona específicamente nada sobre los atributos que se estiran, pero los documentos dicen: 'El receptor sigue los cambios a esta cadena y mantiene sus asignaciones de atributos actualizadas. Parece ser lo que está ocurriendo. –