12

我正在研究符号弹出按钮的细节,类似于 Xcode 3 在其编辑器窗口顶部的内容。

NSMenu我的控制器对象是显示时显示的委托NSPopUpButton。我实现了这两种方法numberOfItemsInMenu:menu:updateItem:atIndex:shouldCancel:在菜单即将显示之前填充菜单。

NSMenuItem但是,每次用户在编辑器中更改选择NSTextView或更改文本时,所选的标题和图像都必须更改;就像 Xcode 一样。

我遇到的问题是当用户单击NSPopUpButton以显示 时NSMenu,选择NSMenuItem的和应该选择的项目不匹配,因为菜单还没有正确数量的项目。

我想知道是否有一种方法可以控制NSMenuItem当用户单击打开菜单时最初突出显示和跟踪的内容。就目前而言,它始终突出显示和跟踪的第一个项目,或者,如果用户之前选择了一个项目,则该项目被突出显示并跟踪。

我尽我所能解释,但这里有一张图片说明了我的问题:

http://imgur.com/izGvh

我希望用户打开菜单时突出显示的项目与所选项目相同。有任何想法吗?

4

5 回答 5

1

我会使用 NSPopupbutton - 它可以做你想做的事。也许你甚至隐藏它?

于 2012-11-10T08:14:37.280 回答
1

我不太确定我是否理解您的问题,但如果我们可以为这些菜单项添加标签。例如

[mMenuItemOne setTag : 1];
[mMenuItemTwo setTag : 2];
[mMenuItemThree setTag : 3];
[mMenuItemFour setTag : 4];}

我们可以使用 [_popUp selectItemWithTag: _selectedItem] 选择任何菜单项;

于 2013-06-27T12:06:17.660 回答
0

只是提示不是完整的解决方案。

尝试在显示的菜单后立即将 NSMouseMoved 事件发布到您的应用程序。主要问题是在这里检测要突出显示的项目的位置。只是一个起点。

于 2012-10-26T01:29:02.997 回答
0

您是否尝试过这种NSMenuDelegate方法:处理突出显示

– menu:willHighlightItem:

NSMenuDelegate 协议参考

您还可以将NSMenuItem索引存储在某个 var 中以跟踪所选项目以供以后使用。

于 2012-10-17T16:51:21.873 回答
0

我不确定,您要移动鼠标选择突出显示(蓝色的东西)还是复选标记?

通常,复选标记是您要更改的内容。您可以validateMenuItem:使用该方法从您的方法(或在您的项目设置为不参与验证的任何其他时间)执行此操作-setState:

蓝色突出显示是用户键盘输入或鼠标位置的指示符,你不应该弄乱它。改变它没有任何意义,因为它会在用户移动鼠标的那一刻改变回来,即使是一个像素。

也就是说,您可以设置 的selectedItemNSPopUpButton这将导致整个菜单被移动,因此位于selectedItem鼠标下方(假设鼠标刚刚单击了弹出按钮)。

如果在弹出按钮决定选择什么项目之后调用菜单委托方法,则不能使用它。相反,您可能可以从处理程序中设置selectedItem弹出按钮的和菜单。NSPopUpButtonWillPopUpNotification

如果这也被称为太晚了,你可能不得不子类NSPopupButtonCell化并覆盖它-attachPopUpWithFrame:inView:(我认为当你不点击并在选择弹出按钮时点击空格键时,这也是应该工作的地方)。

于 2014-04-01T12:25:43.113 回答