#objective-c #cocoa #nsmenuitem #nsstatusitem
#objective-c #cocoa #nsmenuitem #nsstatusitem
Вопрос:
Прежде чем я начну, я должен сказать, что я знаю, что это кажется маловероятным, однако я решил, что попробовать стоит.
Одно приложение, над которым я сейчас работаю, — это приложение для Mac Statusbar. В строке меню есть NSStatusItem, и при нажатии на него отображается пользовательское окно с всплывающим видом (как на iPad или как у Fantastical на Mac).) В любом случае, я начал тестировать это, вставив один элемент nsmenu в меню status items. Представление установило чистый цвет для цвета фона в своем окне. Однако это все еще не совсем работает, как вы можете видеть на рисунке ниже
- Все еще есть небольшая белая тонкая линия над и под элементом
- Прозрачная область не является четкой, как будто на ней есть фильтр размытия
В остальном это работает фантастически великолепно. Я просто не знал, пытался ли кто-нибудь еще когда-либо что-либо подобное раньше, и выяснил, как преодолеть эти 2 проблемы, которые, кажется, единственное, что мешает этому работать.
Если нет способа сделать это, мне, возможно, придется прибегнуть к использованию пользовательского представления для NSStatusItem, чтобы я мог получить координаты на экране, чтобы расположить свое собственное окно под NSStatusItem.
Комментарии:
1. Мой вопрос к вам: как вам удалось сделать эту часть меню понятной? Мой инстинкт подсказывает, что этого нельзя избежать;
NSMenu
применяет фильтр размытия к фону своих элементов независимо от того, что нарисовано, но мне интересно, как вы сюда вообще попали. Даже если я использую clear view и вставляю его вNSMenuItem
, я все равно получаю полностью белый фон. Специальный код?2. внутри представления nsmenuitem вы вызываете [[self window] setBackgroundColor:[NSColor clearColor]]
3. Интересно. Я разберусь с этим…
4. Это странно. Похоже, у меня это не работает.
[[[self.menuItem view] window] setBackgroundColor:[NSColor clearColor]]
in-awakeFromNib
, похоже, не имеет никакого эффекта. Пример: cl.ly/3k1A02113g2T2j273H2N5. Если это не сработает, я бы порекомендовал пользовательское всплывающее окно (или настоящие всплывающие окна в Lion) вместо меню.
Ответ №1:
Поддельное окно кажется довольно странным подходом к этому. Почему бы просто не открыть обычное окно? Я предлагаю MAAttachedWindow:http://mattgemmell.com/2007/10/03/maattachedwindow-nswindow-subclass
Комментарии:
1. это сильно усложняет nsstatusitem с точки зрения необходимости использовать пользовательский nsview, чтобы вы могли получить координаты экрана и расположить окно под ним. Я не против этого, я знал, что это маловероятно, но я не знал, есть ли способ подделать это таким образом.