在用户选择菜单项后,如何保持NSPopUpButton打开?

时间:2009-06-13 15:15:45

标签: objective-c nsmenu

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

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

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

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

2 个答案:

答案 0 :(得分:1)

不使用菜单,人们可能会使用可折叠的盒子。我在许多应用程序(也由Apple提供)中看到过,所以我想这是推荐的多种选择样式指南。 当您单击公开按钮时,可折叠框会展开,并且它会释放所有需要的项目 - 例如带有复选框的桌面视图。 在这种情况下,此框下方的视图必须向下移动,而不是干扰框。

before

enter image description here

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

答案 1 :(得分:0)

通常你不应该将控件弯曲到原来的意图之外。用户希望在进行选择后关闭弹出按钮。我认为你不应该或者可以迫使NSPopUpButtonCell以这种方式行事。如果你这样做,你将会进行子类化和修改控件,以至于它可能会改变/破坏未来版本的Mac OS X.你还必须担心用户认为菜单在关闭后会关闭的可用性问题选择。

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