如何限制“弹出窗口” NSPopUpButton 的大小?
我有一个很大的列表 - 超过 200 个项目 - 由 NSPopUpButton 管理。单击时,列表会一直延伸到屏幕的顶部或底部以及更远的地方。
如何限制打开大小,以便一次最多显示 20 个左右的项目?
I have a large list - over 200 items - managed by an NSPopUpButton. When clicked, the list extends all the way to the top or bottom of the screen and beyond.
How can I limit the open size, so that at most 20 or so items are shown at once?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我找到的解决方案如下:
我对 NSPopUpButton 进行了子类化,并在子类中定义了
confinementRectForMenu:onScreen:
(NSMenuDelegate 协议)。这限制了列表占用的空间。不幸的是,您不能只指定尺寸,还必须确定位置。您可以采用[self frame] origin
,使用[[self superview] ConvertPointToBase:]
,稍微推动它并进行任何其他计算,然后使用进行最终转换[[自身窗口]convertBaseToScreen:]
。The solution I found was the following:
I subclassed NSPopUpButton, and in my subclass defined
confinementRectForMenu:onScreen:
(part of the NSMenuDelegate protocol). This limits the space that the list takes up. Unfortunately, you can't just specify a size but must do the work to determine the position. You can take[self frame] origin
, use[[self superview] convertPointToBase:]
, nudge it over a bit and do whatever other calculations, then do a final conversion with[[self window] convertBaseToScreen:]
.对于弹出菜单来说 200 个项目太多了。 Mac 人机界面指南 建议弹出菜单最多应包含 12 个项目。
您需要重新考虑您的设计。我建议您创建一个不带标题的单列
NSTableView
,而不是弹出菜单,并让用户从可滚动选项列表中选择一个项目。200 items is too many for a pop-up menu. The Mac Human Interface Guidelines recommend that a pop-up menu should contain a maximum of 12 items.
You need to rethink your design. I suggest that instead of the pop-up menu, you create a single-column
NSTableView
with no header and let your users select an item from a scrollable list of options.