Приложения 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, но оно определенно все еще там. Смотрите скриншоты:

ДО:

введите описание изображения здесь

ПОСЛЕ:

введите описание изображения здесь

Другие вопросы по тегам