Я пытаюсь создать приложение для Mac со значком NSStatusItem в строке состояния. Значок строки состояния должен поддерживать перетаскивание файлов, а также должен отображать меню при нажатии.
Проблема в том, что мне удалось реализовать обе функции по отдельности, и мне трудно объединить их вместе.
Мне удалось создать приложение строки состояния по этой ссылке:
http://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/
И затем мне удалось добиться функциональности перетаскивания на значке строки состояния, используя следующую ссылку
Перетаскивание с помощью NSStatusItem
Проблема, с которой я столкнулся, заключается в следующем: чтобы получить перетаскивание, мне нужно создать другое представление, а затем назначить это представление для NSStatusItem, как показано ниже:
NSStatusItem *statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
ViewWithDragFunctionality* viewWithDrag = [[ViewWithDragFunctionality alloc] initWithFrame:NSMakeRect(0, 0, 24, 24)];
[statusItem.view addSubview:viewWithDrag];
Поскольку это просто представление, оно, очевидно, не ведет себя как представление по умолчанию для NSStatusItem и не поддерживает взаимодействия с мышью или что-либо еще. Мне удалось найти способ обойти это, добавив следующую функцию в ViewWithDragFunctionality.m
- (void)mouseDown:(NSEvent *)theEvent {
NSLog(@"Status Bar Icon Clicked");
}
Функция вызывается всякий раз, когда щелкают значок строки состояния, а также обнаруживается перетаскивание файла.
Но теперь я застрял в том, чтобы выяснить, как заставить меню отображаться при нажатии на значок строки состояния.
Любая помощь будет высоко ценится. Я работаю над решением этой проблемы и опубликую его здесь, если сначала найду что-нибудь :)
С Уважением
Шумайс