добавить CustomView в NSStatusItem

#xcode #cocoa

#xcode #какао

Вопрос:

Я хотел бы создать приложение в строке состояния, которое имеет стиль, отличный от меню. то же, что и FaceTab для facebook (я имею в виду только интерфейс, а не функциональность)… это мои коды:

 -(void)awakeFromNib{
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setView:customView];
    //[statusItem setMenu:menu];
    [statusItem setTitle:@"Status"];
    [statusItem setHighlightMode:YES];
}
  

…..
итак, как только я использую NSMenu, все работает нормально, но когда я использую NSView и CustomView outlet, в строке меню ничего не появляется. Помогите, пожалуйста!

Комментарии:

1. Вы уверены, что CustomView что-то рисует?

Ответ №1:

Задействовано несколько движущихся частей, поэтому лучший совет, который я могу дать, — это проверить этот отличный пример проекта от Вадима Шпаковского.

Комментарии:

1. Можете ли вы предложить мне более простой способ, я просто хочу связать пользовательский вид и заставить его появиться, как только я нажму на значок своего приложения в строке состояния.

2. Вы не можете прикрепить представление к элементу состояния — вы должны прикрепить к нему NSMenu, а затем добавить свой пользовательский вид в NSMenuItem в этом меню. Однако вы столкнетесь со всевозможными проблемами, если захотите выполнить какую-либо обработку событий. Я настоятельно рекомендую вам использовать правильное NSWindow, как в примере, на который я ссылался.

3. Да, это то, что я хотел, спасибо :), для тех, у кого такая же проблема: вам просто нужно щелкнуть правой кнопкой мыши по любому элементу в NSMenu (в файле .xib), затем связать «Просмотр» с вашим элементом управления (например, пользовательским представлением или кнопкой или чем-либо еще).

Ответ №2:

В конце вашего метода awakeFromNib вам может потребоваться вызвать retain для StatusItem, чтобы он не выходил из области видимости. Я боролся с этой же проблемой, и добавление [statusItem retain]; исправило ее, так что теперь я вижу свое меню состояния в строке состояния Mac OS.

 -(void)awakeFromNib{
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
    [statusItem setView:customView];

    // in my code, this is uncommented, and menu is an instance variable.
    //[statusItem setMenu:menu];

    [statusItem setTitle:@"Status"];
    [statusItem setHighlightMode:YES];

    // this was needed to get the icon to display in the status bar.
    [statusItem retain];
}