Mac OSX NSStatusItem с настраиваемыми элементами NSMenu / MenuItem и функцией перетаскивания

Я пытаюсь создать приложение для 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");
}

Функция вызывается всякий раз, когда щелкают значок строки состояния, а также обнаруживается перетаскивание файла.

Но теперь я застрял в том, чтобы выяснить, как заставить меню отображаться при нажатии на значок строки состояния.

Любая помощь будет высоко ценится. Я работаю над решением этой проблемы и опубликую его здесь, если сначала найду что-нибудь :)

С Уважением

Шумайс


person Shumais Ul Haq    schedule 05.02.2013    source источник


Ответы (1)


После многих дней испытаний, поиска подходящих руководств и безрезультатных ударов головой о стену я наконец наткнулся на базу кода приложения imgur, которая была размещена на github для общественности.

Код размещен на gihthub пользователем по имени ZBUC.

Код, который помог мне, находится в следующем месте репозитория на github: https://github.com/zbuc/imgurBar < / а>

Это именно то, что было необходимо, после изучения того, как он / они там что-то делали, и объединения того, что я узнал / нашел со ссылками, упомянутыми в вопросе, я смог создать пункт меню пользовательского статуса для моего приложения, смог получить правильное раскрывающееся меню, как в случае с элементом меню состояния по умолчанию, а также возможность добавления функции перетаскивания в пункт меню состояния моих приложений.

Итак, теперь у меня есть настраиваемое меню состояния для моего приложения, которое работает как обычное меню состояния, а также поддерживает функцию перетаскивания.

Я надеюсь, что ссылки в вопросе, а также ссылка на репозиторий, размещенная выше, помогут всем, кому нужно то, что я сделал.

Спасибо

Шумайс

person Shumais Ul Haq    schedule 27.02.2013