2009-06-13 291 views
2

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

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

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

这是如何实现的?我应该子类化NSMenuItem并以某种方式拦截鼠标点击?在弹出的菜单上覆盖一个透明的NSView,并再次拦截点击?我很乐意提出这些建议,但是我会在实现这些任何一个时遇到困难......指向正确的覆盖方法的指针将不胜感激。

回答

0

通常情况下,您不应该将控件弯曲得太过原来的意图。用户希望在选择后弹出按钮关闭。我不认为你应该或者可以强制NSPopUpButtonCell以这种方式行事。如果你这样做,你将会严格控制和修改控件,以至于它可能会改变/打破未来版本的Mac OS X.你还必须担心用户认为菜单在制作完成后会关闭的可用性问题一个选择。

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

+0

感谢您的评论。我当然会考虑编写我自己的NSView的子类。然而,它可以解释所有的子菜单,图像,开/关状态等,这些都是免费的NSPopUpButtonCell/NSMenu组合。 所以...我可以理解,编写我自己的NSView是一种方法,但我坦白地认为,如果我完全模仿NSPopUpButton,但只是改变我想改变的行为 - 那么我可能还会继续和“弯曲[控制]太远了它的原意”!我的意思是,结果是一样的,所以站在仪式上似乎毫无意义。 – Dennis 2009-06-16 04:41:08

1

可以使用可折叠框,而不是使用菜单。我已经看到,在许多应用程序中(也由Apple提供),所以我想这是多选的推荐样式指南。 当您点击披露按钮时,可折叠框会展开,并且它可以免费提供所有需要的项目 - 比如带复选框的桌面视图。 在这个盒子下方的视图必须向下移动,而不是干扰盒子。

before

enter image description here

上披露按钮再次点击将缩小盒子放回它的起源。效果类似于关闭菜单。

相关问题