2011-09-22 6 views
7

que utilizanNSButton setAlignment no funciona

[button setAlignment:NSCenterTextAlignment]; 

para que la pantalla de texto en el centro del botón.

Funcionó.

Pero si fijo botón atributo de título antes del código, el botón 'setAlignment' no funcionará

- (void)setButtonTitle:(NSButton*)button fontName:(NSString*)fontName fontSize:(CGFloat)fontSize fontColor:(NSColor*)fontColor; 
{ 

    NSMutableAttributedString *attributedString = 
    [[NSMutableAttributedString alloc] initWithString:[button title] 
            attributes:[NSDictionary dictionaryWithObject:[NSFont fontWithName:fontName size:fontSize] 
                      forKey:NSFontAttributeName]]; 
    [attributedString addAttribute:NSForegroundColorAttributeName 
           value:fontColor 
           range:NSMakeRange(0, [[button title] length])]; 


    [button setAttributedTitle: attributedString]; 
    [button setAlignment:NSCenterTextAlignment];//button title alignment always displayed as 'NSLeftTextAlignment' rather than 'NSCenterTextAlignment'. 

} 

alineación título siempre se muestra como 'NSLeftTextAlignment' en lugar de 'NSCenterTextAlignment'.

la bienvenida a cualquier comentario

+0

¿Funciona si no se atribuye el título? Quizás necesite establecer la alineación en la cadena atribuida. –

+0

funcionó si el título no se atribuye, pero no sé cómo agregar la alineación a la cadena atribuida – monsabre

+0

He editado la pregunta – monsabre

Respuesta

18

Puesto que usted está usando una cadena con atributos para el título del botón, los atributos de esa cadena son responsables de establecer la alineación.

Para centro que atribuye cadena, añadir un atributo NSParagraphStyleAttributeName con un valor de alineación centrada:

NSMutableParagraphStyle *centredStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease]; 
[centredStyle setAlignment:NSCenterTextAlignment]; 

NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:centredStyle, 
         NSParagraphStyleAttributeName, 
         [NSFont fontWithName:fontName size:fontSize], 
         NSFontAttributeName, 
         fontColor, 
         NSForegroundColorAttributeName, 
         nil]; 
NSMutableAttributedString *attributedString = 
[[NSMutableAttributedString alloc] initWithString:[button title] 
           attributes:attrs]; 

[button setAttributedTitle: attributedString]; 

En el código anterior, he creado un único attrs diccionario posee la totalidad de los atributos de la cadena con atributos. Desde su código, parece que el color de la fuente se debe aplicar a toda la cadena de todos modos.

+3

la respuesta es, por supuesto, correcta. Solo quiero expresar mi frustración por la forma en que las cosas se diseñan en términos de desarrollo de la interfaz de usuario en la Mac ... Es decir ... tanto código para tener un botón con un texto personalizado centrado en el color ... está volviendo loco ridículo. ¡DESPIERTA LA MANZANA! –

+0

@RaduSimionescu bienvenido al mundo del cacao –