检测何时通过拖放删除了 NSStatusItem

Detect when a NSStatusItem has been removed via drag and drop

可以将NSStatusItem'sbehaviour属性设置为removalAllowed(NSStatusItemBehaviorRemovalAllowed) 然后用户可以使用拖放操作从状态栏中删除该项目。

示例:从状态栏中删除 WiFi 状态项

但是,我无法检测到状态栏何时被删除,因此我可以记住它并且不会在用户下次启动应用程序时显示它。没有委托或通知,statusBar 属性 是 readonly 所以我不能覆盖 setter.

有什么想法吗? :)

NSStatusItemBehaviorRemovalAlloweddocumentation 说:

Upon removal, the item’s visible property changes to NO. This change is observable using key-value observation.

因此您可以为 属性 添加一个 KVO 观察器,如果它更改为 NO(假设您没有将其设置为 NO),则不要在以后的发布中显示您的状态栏项目。


也就是说,在测试中:系统可以很好地为您处理这个问题。当您创建状态栏项时,不要设置 visible 属性,而是设置 autosaveName。如果用户从状态栏中删除您的项目,系统会将其写入 ~/Library/Preferences 中的应用首选项,并且您的状态栏项目将不会在未来的启动中可见。

要恢复可见性,请手动将 visible 属性 设置为 YES