У меня есть приложение, которое работает как обычное приложение, но также имеет NSStausItem
. Я хотел реализовать возможность установить в настройках флажок, и когда этот флажок включен, элемент состояния должен отображаться, но когда флажок снят, элемент состояния должен быть удален или быть невидимым.
Я нашел кого-то, кто столкнулся с подобной проблемой на форуме здесь: Как включить или выключить пункт состояния в строке меню с помощью флажка?
Но проблема с этим решением заключается в том, что оно не работает должным образом. Поэтому я устанавливаю этот флажок, и все работает нормально, но когда я открываю приложение во второй раз, приложение не распознает выбор, который я сделал при первом запуске. Это связано с тем, что флажок не привязан к BOOL
или чему-то еще, флажок имеет только IBAction
, который удаляет или добавляет элемент состояния во время выполнения.
Итак, мой вопрос: как я могу установить флажок в настройках, который позволяет мне выбирать, должен ли отображаться элемент статуса или нет.
Хорошо, на самом деле я попробовал следующее, я скопировал из сообщения, которое я дал вам ссылку
В AppDelegate.h:
NSStatusItem *item;
NSMenu *menu;
IBOutlet NSButton myStatusItemCheckbox;
а затем в Delegate.m :
- (BOOL)createStatusItem
{
NSStatusBar *bar = [NSStatusBar systemStatusBar];
//Replace NSVariableStatusItemLength with NSSquareStatusItemLength if you
//want the item to be square
item = [bar statusItemWithLength:NSVariableStatusItemLength];
if(!item)
return NO;
//As noted in the docs, the item must be retained as the receiver does not
//retain the item, so otherwise will be deallocated
[item retain];
//Set the properties of the item
[item setTitle:@"MenuItem"];
[item setHighlightMode:YES];
//If you want a menu to be shown when the user clicks on the item
[item setMenu:menu]; //Assuming 'menu' is a pointer to an NSMenu instance
return YES;
}
- (void)removeStatusItem
{
NSStatusBar *bar = [NSStatusBar systemStatusBar];
[bar removeStatusItem:item];
[item release];
}
- (IBAction)toggleStatusItem:(id)sender
{
BOOL checked = [sender state];
if(checked) {
BOOL createItem = [self createStatusItem];
if(!createItem) {
//Throw an error
[sender setState:NO];
}
}
else
[self removeStatusItem];
}
затем в IBaction я добавил это:
[[NSUserDefaults standardUserDefaults] setInteger:[sender state]
forKey:@"MyApp_ShouldShowStatusItem"];
и в моем awakefromnib я добавил это: `
NSInteger statusItemState = [[NSUserDefaults standardUserDefaults] integerForKey:@"MyApp_ShouldShowStatusItem"];
[myStatusItemCheckbox setState:statusItemState];
Затем в построителе интерфейса я создал новый флажок, соединил его с «myStatusItemCheckbox» и добавил IBaction, также я щелкнул инспектор привязок и установил в значении следующую привязку к: NSUserDefaultController
и как ModelKeyPath
я установил: MyApp_ShouldShowStatusItem.
К сожалению, это не работает в все что я делаю не так?