你们都知道Mac OS X中的菜单栏(或更好的NSStatusBar).
我可以移动一些项目,而其他项目则不行.
我希望能够拖动我的应用程序的NSStatusItem.
知道如何实现这个吗?
虽然NSStatusItems出现在Apple的内部"菜单附加功能"附近,但它们是截然不同的,并且表现不同.如果Apple统一了可以出现在菜单栏右侧区域的项目,那将是很好的,但是现在该部分被拆分为不同的"apple internal"(右侧)和"app-provided(NSStatusItem)" " 在左边.
您可以通过将计算机置于屏幕捕获模式(cmd-shift-4),然后按空格键切换到"捕获整个窗口"来显示区别.当您将鼠标悬停在Apple的菜单图标上时,您会看到它们都位于一个窗口中.这解释了他们易于管理和拖拽的能力.将鼠标悬停在其他项上会显示每个NSStatusItem实际上都位于其自己的单个窗口中(恰好由安装它的应用程序拥有).
即使您无法拖动它们,最好坚持使用NSStatusItem.这是Apple的一个缺点,大多数用户都会理解,即使它很烦人.强调长期提供更稳定的应用程序的积极权衡通常会削弱正在推动可拖动性的客户(或经理?)的意见.
您将不得不使用NSMenuExtra
,而不是NSStatusItem
使菜单项成为在SystemUIServer
流程内运行的捆绑包,而不是您自己的应用程序.您还需要使用MenuCracker提供的代码来实现此功能.
NSMenuExtra
没有证件,也没有人支持,因此被认为是"黑客".
我猜测首先有两个API:菜单额外崩溃(或内存泄漏)意味着整个SystemUIServer进程崩溃或内存泄漏 - 包括其他第三方模块以及系统提供的模块.另一方面,对于状态项,这样的问题只会影响您自己的代码.