2

我有一个 NSPopUpButton 为具有自定义视图的状态项提供 NSMenu。弹出按钮显示链接列表。当用户从列表中选择一个链接时,该链接将显示在用户的浏览器中(在后台)。

自然,每次用户选择链接时菜单都会关闭。

我想改变这一点:我希望菜单在用户点击各种链接时保持打开状态,所有这些都可以在后台打开。当用户点击其他地方时,菜单就会消失。

如何实现?我应该继承 NSMenuItem 并以某种方式拦截鼠标点击吗?在弹出的菜单上覆盖一个透明的 NSView 并再次以某种方式拦截点击?我愉快地提出了这些建议,但我将无法实现其中任何一个......将不胜感激指向正确的覆盖方法的指针。

4

2 回答 2

1

与其使用菜单,不如使用可折叠框。我在许多应用程序(也由 Apple 提供)中看到了这一点,所以我想这是多选的推荐样式指南。当您单击披露按钮时,可折叠框会展开,它会免费提供所有所需的项目 - 就像带有复选框的表格视图。在这种情况下,此框下方的视图必须向下移动,以免干扰该框。

前

在此处输入图像描述

再次单击显示按钮会将框缩小回其原点。效果类似于关闭菜单。

于 2016-12-03T20:06:09.480 回答
0

通常,您不应将控件弯曲得太远,超出其原始意图。用户希望弹出按钮在做出选择后关闭。我认为您不应该或可以强制 NSPopUpButtonCell 以这种方式运行。如果你这样做,你将继承和修改控件,以至于它可能会在未来版本的 Mac OS X 中改变/破坏。你还必须担心用户认为菜单会在制作后关闭的可用性问题一个选择。

您可能会考虑编写您自己的 NSView 子类来像您描述的菜单按钮一样工作。用户点击按钮后。您需要使用 NSBorderlessWindowMask 作为样式掩码来创建一个没有边框的新 NSWindow。该窗口的内容视图应该是您在其中实现菜单选择的另一个自定义视图。

于 2009-06-13T18:52:10.410 回答