Cocoa 我怎样才能限制“限制”呢;弹出窗口;N按钮的大小?

Cocoa 我怎样才能限制“限制”呢;弹出窗口;N按钮的大小?,cocoa,nspopupbutton,Cocoa,Nspopupbutton,我有一个很大的列表——超过200项——由一个NSPopUpButton管理。单击时,列表会一直延伸到屏幕的顶部或底部,甚至更远 如何限制打开的大小,以便一次最多显示20个左右的项目?200个项目对于弹出式菜单来说太多了。Mac人机界面指南规定,弹出式菜单最多应包含12项 你需要重新考虑你的设计。我建议您不使用弹出菜单,而是创建一个没有标题的单列NSTableView,让用户从可滚动的选项列表中选择一项。我找到的解决方案如下: 我对nspoupbutton进行了子类化,并在我定义的子类中定义了co

我有一个很大的列表——超过200项——由一个NSPopUpButton管理。单击时,列表会一直延伸到屏幕的顶部或底部,甚至更远


如何限制打开的大小,以便一次最多显示20个左右的项目?

200个项目对于弹出式菜单来说太多了。Mac人机界面指南规定,弹出式菜单最多应包含12项


你需要重新考虑你的设计。我建议您不使用弹出菜单,而是创建一个没有标题的单列
NSTableView
,让用户从可滚动的选项列表中选择一项。

我找到的解决方案如下:


我对nspoupbutton进行了子类化,并在我定义的子类中定义了
confinementRectForMenu:onScreen:
(协议的一部分)。这限制了列表占用的空间。不幸的是,您不能只指定一个大小,而必须完成确定位置的工作。您可以使用
[self-frame]origin
,使用
[[self-superview]convertPointToBase:][/code>,将其稍微移动一点,然后执行任何其他计算,然后使用
[[self-window]convertBaseToScreen:][/code>

进行最终转换,您试图呈现的内容类型是什么?可能有更好的方法。一个典型的StackOverflow回答:“你做错了!”:-)问题是我希望这个控件只占用一行-如果我能让NSTableView“弹出”,那就太好了。如果你能以Lion为目标,那么我想你可以使用popover。然而,我的观点是,你做错了,你应该想另一种方法:-)