2010-08-02 10 views
7

Estoy tratando de recrear los bonitos botones con textura como Finder, Safari y Transmission tienen en su barra de herramientas. Primero comencé simplemente arrastrando un "botón de Textura" en el IB y tal. Todo funciona bien, excepto cuando un usuario configura la barra de herramientas en el modo "Solo texto". Cuando haga clic en el botón, la barra de herramientas habilitará "Ícono y etiqueta" por sí mismo. He eliminado el código y los delegados de la barra de herramientas para asegurarme de que no sea un problema de código.NSButton en NSToolbarItem (setView) cuando se hace clic en "Solo texto" fuerza el modo a "Icono y etiqueta"

Luego, solo para asegurarme, creé un nuevo proyecto (sin ningún código) y puedo reproducir el problema con una ventana NSW limpia con una barra NSToolbar con un NSToolbarItem con un NSButton.

Adición de los NSButtons a través de un código como:

- (NSArray*)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar { 
    return [NSArray arrayWithObject:@"myToolbarMenu"]; 
} 

- (NSArray*)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar { 
    return [self toolbarAllowedItemIdentifiers:toolbar]; 
} 

- (NSToolbarItem*)toolbar:(NSToolbar*)toolbar 
    itemForItemIdentifier:(NSString*)str 
willBeInsertedIntoToolbar:(BOOL)flag 
{ 
    if ([str isEqualToString:@"myToolbarItem"] == YES) { 
     NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str]; 
     [item setView:[[NSButton alloc] init]]; 
     [item setMinSize:NSMakeSize(50,50)]; 
     [item setMaxSize:NSMakeSize(50,50)]; 
     [item setLabel:@"Text"]; 
     return [item autorelease]; 
    } 
    return nil; 
} 

Pero esto también tiene el mismo efecto: cuando se presiona un NSToolbarItem con un NSButton en ella en "Texto único modo" de la barra de herramientas se impone es el modo de " Icono y texto ".

¿Tiene alguna idea de cómo puedo hacer que funcione correctamente o tal vez tener una alternativa para crear las bonitas barras de herramientas de herramientas como Safari, etc.?

Respuesta

8

Debe agregar una representación de menú a cada NSToolbarItem que tenga una vista personalizada. Por debajo de la línea en la que se puede asignar la NSToolbarItem añadir lo siguiente:

NSMenuItem *menuRep = [[NSMenuItem alloc] initWithTitle:@"Text" action:@selector(targetMethod:) keyEquivalent:@""]; 
[menuRep setTarget:<target>]; 
[item setMenuFormRepresentation:menuRep]; 

Mientras el objetivo es válida sus artículos deben permanecer como sólo texto botones; de lo contrario, serán deshabilitados. Ver Setting a Toolbar Item's Representation.

Normalmente, también necesitaría implementar validateToolbarItem: en su destino, pero para los elementos de vista personalizados, en su lugar, debe anular la validación: para hacer algo apropiado. Ver Validating Toolbar Items.

+0

Perdón por la respuesta lenta. Gracias por la respuesta, definitivamente lo comprobaré lo antes posible. Gracias por la respuesta. –

Cuestiones relacionadas