Приложения NSMenuBar, влияющие (отключающие) представления друг друга (NSMenuItem's)? BUG
Я работаю над приложением NSMenuBar, и другое приложение NSMenuBar, похоже, влияет на поведение моего приложения на экране!? Точнее: Adobe Creative Cloud Application. Когда я нажимаю на этот значок (креативное облако), появляется всплывающее окно. После этого, когда я нажимаю на иконку StatusBar, появляется мое меню, НО, все NSMenuItem, которые должны быть включены, внезапно отключаются и перестают быть интерактивными.
Некоторые наблюдения:
Когда я регистрирую включенное состояние NSMenuItem, он правильно регистрируется как включенный, но он явно не отображается как включенный (см. Скриншот), и нажатие на него просто закрывает меню без выполнения соответствующего действия. Я делаю запись со следующим кодом:
-(void)menuWillOpen:(NSMenu *)menu
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC),
dispatch_get_main_queue(),
^{
NSLog(@"preferences menu-item is enabled: %hhd",[self.preferenceMenuItem isEnabled]);
});
}
NSMenu, которое я использую, установлено в setAutoenablesItems:NO.
Кроме того, Adobe Creative Cloud использует всплывающее окно. И когда он открывается, он явно парит над экраном, который использует мой NSMenu.
Когда я пытаюсь воспроизвести это с другими приложениями NSMenuBar (например, Apple Wi-Fi или Bluetooth), все это работает. Нет проблем. С другой стороны, эти приложения не используют Popover-представления, и они не полностью перекрывают пространство моего приложения.
Пожалуйста, смотрите эти скриншоты как иллюстрацию:
До
Вредоносное Творческое Облако
После
Что мне здесь не хватает? Приложения не должны влиять друг на друга, как это верно? Я медленно, но верно схожу с ума по этому поводу. Любая помощь очень ценится! Thnx!!
1 ответ
Я нашел решение своей проблемы. Поэтому я надеюсь, что помогу кому-либо еще в борьбе с этим.
Я использовал свое главное меню XIB-файла (со строкой состояния) и ссылался на это меню, чтобы открывать его при нажатии на значок строки состояния. Это привело к тому, что приложение оказалось в фокусе и отображало два раза одно и то же меню (хотя и не открывалось одновременно), одно под значком строки состояния, как предполагалось, и одно с левой стороны рядом с символом яблока. Всякий раз, когда меню строки состояния каким-то образом деактивировалось, левое меню все еще работало, как если бы фокус был смещен на это. Для меня решение состояло в том, чтобы отделить мое ссылочное меню от меню XIB, перетаскивая его за пределы родительского меню. Это странно, потому что почему-то его больше не видно в InterfaceBuilder, но оно определенно все еще там. Смотрите скриншоты:
ДО:
ПОСЛЕ: