Как создать представление NSMenuItem для пункта меню со встроенным NSProgressIndicator?

Я хотел бы создать пункт меню со встроенным NSProgressIndicator, аналогичный пункту меню «Wi-Fi: поиск сетей…» в меню состояния Wi-Fi:

Снимок экрана с открытым меню состояния Wi-Fi на Mac, показывающим пункт меню Wi-Fi: поиск сетей…

Я думаю, что мне нужно будет использовать метод setView:, как обсуждалось по адресу: Представления в пунктах меню. Однако, когда я вызываю setView: и передаю NSProgressIndicator, отображается только NSProgressIndicator.

Как можно создать пользовательский вид элемента меню, чтобы получить результат, аналогичный пункту меню «Wi-Fi: поиск сетей…» в меню состояния Wi-Fi?


person Daniel Trebbien    schedule 21.09.2014    source источник


Ответы (1)


Как указано в документе, на который вы ссылаетесь:

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

Итак, если вы хотите, чтобы ваш пункт меню выглядел как обычный пункт меню плюс некоторые другие элементы, ваше представление должно отображать обычные функции пункта меню в дополнение к другим элементам. Таким образом, вы можете настроить вид пункта меню на пользовательский вид. Индикатор прогресса будет одним из подпредставлений этого пользовательского представления, но вам потребуются другие подпредставления для других функций. Например, текстовое поле для текста пункта меню и представление изображения для индикатора состояния (если ваш элемент показывает состояние).

Вам придется рисовать выделение, когда элемент выбран или отслеживается. Вам также придется выполнять отслеживание мыши. У Apple есть пример кода, который демонстрирует различные части этого:

MenuItemView
CustomMenus
GridMenu

person Ken Thomases    schedule 21.09.2014
comment
Спасибо за ваш ответ. Сейчас я смотрю на образец CustomMenus. Это кажется наиболее близким к тому, что я пытаюсь сделать. В частности, есть suggestionprototype.xib, с которым я пытаюсь следовать... - person Daniel Trebbien; 21.09.2014
comment
Во-первых, к этому образцу прилагается видео WWDC, которое вы можете посмотреть . Кроме того, часть его показывает представление в меню, а часть показывает, как построить окно, которое выглядит и работает как меню, но на самом деле не является NSMenu. Итак, помните, на какую часть вы смотрите. - person Ken Thomases; 21.09.2014
comment
Это видео очень полезно. Название сеанса — Key Event Handling in Cocoa Applications, но оно охватывает настраиваемые меню, начиная с 19:13. - person nschum; 25.10.2014
comment
@KenThomases Не мог бы я просто связать NSImage с пунктом меню, который заполняет весь пункт? - person phimuemue; 14.02.2017