繁体   English   中英

有没有办法控制打开菜单时最初突出显示的NSMenuItem项?

[英]Is there a way to control the NSMenuItem item that is initially highlighted when opening a menu?

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

我的控制器对象是的代表NSMenu的时被示出NSPopUpButton被示出。 我实现了两个方法numberOfItemsInMenu:menu:updateItem:atIndex:shouldCancel:在即将显示之前填充菜单。

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

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

我想知道是否有办法控制当用户点击打开菜单时最初突出显示和跟踪的NSMenuItem 目前,它始终突出显示和跟踪的第一个项目,或者,如果用户先前已选择项目,则突出显示并跟踪该项目。

我尝试尽可能地解释,但这是一个说明我的问题的图像:

http://imgur.com/izGvh

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

我会使用NSPopup按钮 - 它可以做你想要的。 也许你甚至隐藏它?

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

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

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

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

– menu:willHighlightItem:

NSMenuDelegate协议参考

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

只是暗示不是一个完整的解决方案。

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

我不确定,你想移动鼠标选择高亮(蓝色的东西)还是复选标记?

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

蓝色突出显示是用户键盘输入或鼠标位置的指示器,您不应该弄乱它。 改变它没有任何意义,因为它会在用户移动鼠标甚至单个像素时改变。

这就是说,你可以设置selectedItem中的NSPopUpButton ,这将导致移动的整个菜单,因此selectedItem是鼠标下(假设鼠标刚刚点击弹出的按钮)。

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

如果这也被称为太晚了,你可能必须NSPopupButtonCell ,并在-attachPopUpWithFrame:inView:的覆盖中-attachPopUpWithFrame:inView:我认为当你不点击并且只是点击空格键时这也应该有效选择弹出按钮时)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM