Как мне установить начальное состояние NSToolbar, используемого для многопанельного окна настроек? - PullRequest
2 голосов
/ 19 ноября 2010

Я пытаюсь закодировать окно настроек нескольких панелей с помощью NSToolbar, как видно во многих приложениях Mac.Есть несколько учебных пособий, которые делают это путем программного наполнения панели инструментов, но для этого требуется большой «механический» код, который я решил сохранить, настроив всю панель инструментов в IB.Каждый элемент NSToolbar вызывает действие, указанное ниже, и тег используется для выбора вида (на который ссылается тот же перо с IBOutlet):

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

Затем я устанавливаю Autovalidates для каждого NSToolbarItem, который будет давать выбранный / отмененный выборпосмотрите на элементы панели инструментов.

Теперь вот моя проблема: я не смог найти хороший способ установить начальное состояние.В тот момент, когда я открываю окно, ни один из элементов панели инструментов не выбирается, и я не получаю никакого обновления кода, который позволил бы мне выбрать его правильно.Я придумал вот что:

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

Это все избыточная информация: 1) Мне нужно объявить идентификаторы элементов для элемента панели инструментов только для этого 2) Я вручную продублирую имя 1-го предпочтенияпанель, чтобы иметь возможность установить заголовок окна.

Есть ли лучший способ инициализировать панель инструментов?Как я могу вызвать первый элемент панели инструментов, чтобы он вызывал changeViewControllerAction?

спасибо.

1 Ответ

5 голосов
/ 17 мая 2011

Я использую панель инструментов для выбора разных вкладок и использовал следующее:

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

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

Это, казалось, дало мне то, что я хотел, без лишних слов. Я не уверен, что это ответ, который вы ищете, но похоже, что вы выбрали правильный путь.

...