2009-12-23 12 views
12

¿Cómo le daría un NSTextView algo de margen/un margen a la izquierda? Sé cómo se hace en un NSTextField (mediante la subclase de NSTextFieldCell), pero ¿cómo se hace en un NSTextView?Dando un NSTextView algo de relleno/un margen

EDIT: Un poco más de información: 1. La vista de texto solo tiene texto sin texto enriquecido y sin otras cosas elegantes como un editor de texto adecuado (por ejemplo, párrafos). 2. ¿Es posible usar setTextContainerInset: para esto?

Respuesta

16

Puede intentar subclasificar NSTextView e invalidar el textContainerOrigin.

Detalles here.

Por ejemplo esta subclase dará un margen superior e inferior de 5 izquierda 20 y derecha de 10.

@implementation MyTextView 

- (void)awakeFromNib { 
    [super setTextContainerInset:NSMakeSize(15.0f, 5.0f)]; 
} 


- (NSPoint)textContainerOrigin { 
    NSPoint origin = [super textContainerOrigin]; 
    NSPoint newOrigin = NSMakePoint(origin.x + 5.0f, origin.y); 
    return newOrigin; 
} 

@end 
+1

¿Cuál es la diferencia exactamente entre este enfoque y simplemente el uso de 'setTextContainerInset:'? –

+2

@patrick 'setTextContainerInset' inserta la parte superior y los lados en cantidades iguales. Al desplazar el origen se obtiene un relleno asimétrico en este ejemplo – Abizern

2

Cree un estilo de párrafo mutable (muy probablemente haciendo una copia mutable del estilo de párrafo predeterminado, luego establezca su sangría de cabeza y sangría de cabeza de primera línea en el margen izquierdo que desee. Luego, establezca este estilo de párrafo como el valor del atributo NSParagraphStyleAttributeName para todo el contenido del almacenamiento de texto de la vista

Tenga en cuenta que esto se mostrará en RTF y posiblemente en datos HTML obtenidos de la vista o entregados por la vista Si la vista no es de solo lectura (es decir, , el usuario puede editar el texto y recuperar o recibir ese texto de la vista), entonces probablemente debería evitar esta solución. Si el usuario puede mostrar la regla y editar el estilo del párrafo, entonces debe definitivamente av oid esta solución.

4

La manera en que TextEdit lo hace (cuando está en el modo Ajustar a la página) es colocar la vista de texto dentro de una vista más grande y establecer esa vista más grande como la vista de documento de la vista de desplazamiento. Eso es más trabajo de configurar, pero no filtrará información de presentación (en forma de un estilo de párrafo especialmente personalizado) en el modelo (el texto).

4

Sólo para añadir una actualización de este. iOS7 agrega una propiedad a UITextView llamada textContainerInset. Llamar a setTextContainerInset creará márgenes dentro de TextView para el contenido.

+1

OS X también tiene esta propiedad. –

Cuestiones relacionadas