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