2012-04-18 13 views
18

estoy creando aplicación de cacao en el que he creado NSTextField programación de este tipo,NSTextField alineación vertical

NSView *superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 300, 1400, 500)]; 
NSTextField *myTextField = [[NSTextField alloc] initWithFrame:NSMakeRect(180, 100, 1000, 300)]; 
[myTextField setStringValue:myText]; 
[myTextField setEditable:NO]; 
[myTextField setBezeled:NO]; 
[myTextField setDrawsBackground:NO]; 
[myTextField setSelectable:NO]; 
[myTextField setFont:[NSFont fontWithName:@"Futura" size:22]]; 
[superView addSubview:myTextField]; 
[superView setAutoresizesSubviews:YES]; 
[myTextField setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; 
[self.window.contentView addSubview:superView]; 

ahora quiero alineación vertical de mi texto y debe ser ajustable de acuerdo a la longitud del texto .
¿Alguien tiene alguna sugerencia? Por favor, comparte tu sugerencia :)

Muchas gracias .. !!

Respuesta

11

Lo que quiere es posible, pero tendrá que hacer una subclase de NSTextFieldCell, y luego usar esa subclase en su NSTextField. Los métodos clave que desea anular son drawingRectForBounds:, selectWithFrame: y editWithFrame:

Here is a blog post from the fantastic Daniel Jalkut sobre esto, que incluso incluye una versión descargable listo para funcionar. La publicación es bastante antigua, pero aún así debería funcionar bien.

+0

Gracias sosborn .. !! Déjame probar esto ... Te llamaré si tienes algún problema. :) – iUser

+0

Ok, tengo la clase 'RSVerticallyCenteredTextFieldCell.h' y' RSVerticallyCenteredTextFieldCell.m' pero no sé cómo usarlo, con mi 'myTextField'. – iUser

+0

Eche un vistazo al NSControl (del cual hereda NSTextField). Tiene un método llamado setCellClass :. El documento de control y programación de células de Apple también es bueno para leer. – sosborn

1

Para ajustar el campo de texto al tamaño de cadena, debe calcular el tamaño del texto con NSString 's sizeWithFont: constrainedToSize: lineBreakMode: antes y después de ajustar el tamaño del campo de texto con la configuración del marco.

Para la alineación vertical mira este question (y las respuestas).

+1

@iUser pregunta por NSTextField, que es diferente de UITextField. NSTextField no tiene la propiedad contentVerticalAlignment. – sosborn

+0

Gracias Kai ... !! Estoy usando 'NSTextField' que no da la opción' contentVerticalAlignment'. Cualquier sugerencia ? – iUser

+0

Lo siento. Acabo de cambiar mi respuesta. –

-1

reemplazan ViewWillDraw y colocan su NSTextField en el centro de su vista primaria en este punto. Esto también funciona con el cambio de tamaño en vivo. También puede ajustar el tamaño de la fuente en este punto para encontrar una fuente que se ajuste al nuevo tamaño.

+0

explique su voto negativo y tenga en cuenta que esto fue respondido en 2015. Esto es similar a la respuesta aceptada, solo que en lugar de hacer el dibujo personalizado en NSTextFieldCell, lo hace en NSTextField ... –

Cuestiones relacionadas