2010-11-19 9 views
2

Ich versuche, ein Multiple-Panel-Einstellungsfenster mit einer NSToolbar zu codieren, wie es in vielen Mac-Anwendungen zu sehen ist. Es gibt ein paar Tutorials, die das tun, indem Sie die Symbolleiste programmatisch füllen, aber das scheint viel "mechanischen" Code zu benötigen, den ich speichern wollte, indem ich die gesamte Symbolleiste in IB einrichtete. Jeder NSToolbar Artikel ruft die Aktion unten und den Tag verwendet wird, um die Ansicht zu wählen (bezogen aus der gleichen Feder mit einem IBOutlet):Wie lege ich den Init-Status einer NSToolbar fest, die für ein Multi-Panel-Einstellungsfenster verwendet wird?

-(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]; 
} 

Dann habe ich Autovalidates auf jedem NSToolbarItem, die den An-/Abwahl Blick gibt auf die Symbolleistenelemente.

Jetzt ist hier mein Problem: Ich war nicht in der Lage, einen guten Weg, um den Ausgangszustand zu setzen. In dem Moment, in dem ich das Fenster öffne, ist keines der Toolbar-Elemente ausgewählt, und ich erhalte kein Update für den Code, der es mir auch erlaubt, dies richtig auszuwählen. Was ich kam mit, ist dies:

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

Dies ist um redundante Informationen: 1) Ich brauche die Artikel-Identifikatoren für die Symbolleiste Artikel zu erklären, nur für diesen 2) Ich duplizieren manuell den Namen der ersten Präferenz Panel, um den Fenstertitel einstellen zu können.

Gibt es eine bessere Möglichkeit, die Symbolleiste zu initialisieren? Wie kann ich das erste Element der Symbolleiste aufrufen, so dass es die changeViewControllerAction aufruft?

danke.

Antwort

5

Ich bin mit der Werkzeugleiste verschiedene Registerkarten zur Auswahl und verwendet die folgenden:

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

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

Das schien mir zu bekommen, was ich ohne zu viel Geschwätz wollte. Ich bin mir nicht sicher, ob dies die Antwort ist, nach der Sie suchen, aber es scheint, als wären Sie einer der richtigen.