Как я могу ограничить размер всплывающего окна NSPopUpButton?

У меня есть большой список — более 200 элементов — управляемый NSPopUpButton. При нажатии список расширяется до верхней или нижней части экрана и за его пределы.

Как я могу ограничить открытый размер, чтобы одновременно отображалось не более 20 или около того элементов?


person Mira    schedule 28.07.2011    source источник
comment
Какой тип контента вы пытаетесь представить? Там может быть лучший способ сделать это.   -  person Alec Sloman    schedule 28.07.2011


Ответы (2)


Решение, которое я нашел, было следующим:

Я создал подкласс NSPopUpButton, и в моем подклассе определено confinementRectForMenu:onScreen: (часть NSMenuDelegate). Это ограничивает пространство, которое занимает список. К сожалению, вы не можете просто указать размер, но должны проделать работу, чтобы определить позицию. Вы можете взять [self frame] origin, использовать [[self superview] convertPointToBase:], немного подтолкнуть его и выполнить любые другие вычисления, а затем выполнить окончательное преобразование с [[self window] convertBaseToScreen:].

person Mira    schedule 05.08.2011

200 элементов слишком много для всплывающего меню. Руководство по пользовательскому интерфейсу Mac рекомендует, чтобы всплывающее меню содержало не более 12 пунктов.

Вам нужно переосмыслить свой дизайн. Я предлагаю вместо всплывающего меню создать одноколоночное NSTableView без заголовка и позволить пользователям выбирать элемент из прокручиваемого списка параметров.

person Rob Keniger    schedule 28.07.2011
comment
Типичный ответ StackOverflow: вы делаете это неправильно! :-) Проблема в том, что я хочу, чтобы этот элемент управления занимал только одну строку - если я смогу заставить всплывающее окно NSTableView, это было бы прекрасно. - person Mira; 28.07.2011
comment
Если вы можете настроить таргетинг на Льва, я полагаю, вы могли бы использовать всплывающее окно. Однако я считаю, что вы делаете это неправильно, и вам следует подумать о другом :-) - person Rob Keniger; 01.08.2011