Как я могу оставить NSPopUpButton открытым после того, как пользователь выберет пункт меню? - PullRequest
2 голосов
/ 13 июня 2009

У меня есть NSPopUpButton, предоставляющий NSMenu для элемента состояния с настраиваемым представлением. Всплывающая кнопка отображает список ссылок. Когда пользователь выбирает ссылку из списка, ссылка отображается в браузере пользователя (в фоновом режиме).

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

Я хотел бы изменить это: я хочу, чтобы меню оставалось открытым, пока пользователь нажимает на различные ссылки, которые можно открыть в фоновом режиме. Меню может исчезнуть, когда пользователь щелкнет в другом месте.

Как это можно сделать? Должен ли я создать подкласс NSMenuItem и как-то перехватывать щелчки мышью? Наложить прозрачный NSView на всплывающее меню и, опять же, как-то перехватывать щелчки? Я делаю эти предложения беспечно, но у меня были бы проблемы с реализацией любого из этих ... указателей на правильные методы для переопределения.

Ответы [ 2 ]

1 голос
/ 03 декабря 2016

Вместо использования меню можно использовать складную коробку. Я видел это во многих приложениях (также предоставляемых Apple), поэтому, я думаю, это рекомендуемое руководство по стилю для нескольких вариантов выбора. Складное окно расширяется при нажатии кнопки раскрытия и освобождает все необходимые элементы - например, табличное представление с флажками. В этом случае виды под этим окном должны перемещаться вниз, чтобы не мешать окну.

before

enter image description here

Повторное нажатие на кнопку раскрытия уменьшит коробку до ее начала. Эффект аналогичен закрытию меню.

0 голосов
/ 13 июня 2009

Обычно вы не должны сгибать элемент управления слишком далеко от его первоначального намерения. Пользователи ожидают, что всплывающие кнопки закрываются после выбора. Я не думаю, что вы должны или можете заставить NSPopUpButtonCell вести себя таким образом. Если вы это сделаете, вы будете создавать подклассы и изменять элемент управления настолько сильно, что он может измениться / сломаться в будущей версии Mac OS X. Вам также придется беспокоиться о проблеме юзабилити пользователей, которые думают, что после закрытия меню выбор.

Вы можете написать собственный подкласс NSView, чтобы работать как кнопка меню, которую вы описываете. После того, как пользователь нажимает на кнопку. Вы захотите создать новое NSWindow без рамки, используя NSBorderlessWindowMask в качестве маски стиля. Представление содержимого этого окна должно быть вашим собственным представлением, в котором вы реализуете выбор меню.

...