2010-11-19 26 views
2

J'essaye de coder une fenêtre de préférences de panneau multiple avec un NSToolbar comme vu dans beaucoup d'applications de Mac. Il y a quelques tutoriels qui le font en remplissant par programme la barre d'outils, mais cela semble exiger beaucoup de code "mécanique" que j'ai pensé économiser en configurant la barre d'outils complète dans IB. Chaque élément NSToolbar appelle l'action ci-dessous et l'étiquette est utilisée pour sélectionner la vue (référencée à partir de la même plume avec un IBOutlet):Comment définir l'état d'initialisation d'un NSToolbar utilisé pour une fenêtre de préférences multi-panneaux?

-(IBAction)changeViewController:(id) sender { 
    NSToolbarItem *tbi = (NSToolbarItem*)sender; 
    NSString* label = [tbi label]; 
    NSInteger tag = [tbi tag]; 
    [self displayViewController:tag]; 
    NSWindow* window = [self window]; 
    [window setTitle:label]; 
} 

Je mis Autovalidates sur chaque NSToolbarItem qui donnera le look sélectionné/désélectionné sur les éléments de la barre d'outils.

Maintenant, voici mon problème: je n'ai pas réussi à trouver un bon moyen de définir l'état initial. Au moment où j'ouvre la fenêtre, aucun des éléments de la barre d'outils n'est sélectionné et je n'obtiens aucun udpate au code qui me permettrait de sélectionner ceci correctement non plus. Ce que je suis venu avec ceci:

- (void) awakeFromNib { 
    [self displayViewController:kGeneralPrefsTag]; 
    NSWindow* window = [self window]; 
    NSToolbar *toolbar = [window toolbar]; 
    [toolbar setSelectedItemIdentifier:@"generalPreferences"]; 
    [window setTitle:@"General"]; 
} 

Toutes ces informations redondantes: 1) Je dois déclarer l'élément Identifiants de l'élément de barre d'outils juste pour ce 2) dupliquer manuellement le nom de la 1ère préférence panneau pour être en mesure de définir le titre de la fenêtre.

Y a-t-il une meilleure façon d'initialiser la barre d'outils? Comment puis-je appeler le premier élément de la barre d'outils afin qu'il appelle l'action changeViewControllerAction?

merci.

Répondre

5

J'utilise la barre d'outils pour sélectionner les différents onglets et utilisé les éléments suivants:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    [item1 setEnabled: YES]; 
    [toolbar setSelectedItemIdentifier: @"needItToolbarItem"]; 

    [item2 setEnabled: YES]; 
    [item3 setEnabled: YES]; 
    [item4 setEnabled: YES]; 
} 

Cela semblait me faire ce que je voulais sans trop verbiage. Je ne suis pas sûr si c'est la réponse que vous cherchez, mais il semble que vous étiez l'un sur la bonne voie.