Как мне установить начальное состояние NSToolbar, используемого для многопанельного окна настроек?

Я пытаюсь закодировать окно настроек с несколькими панелями с помощью 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам