Как мне установить начальное состояние 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];
}
Это, казалось, дало мне то, что я хотел, без лишних слов. Я не уверен, что это ответ, который вы ищете, но кажется, что вы выбрали правильный путь.