检测何时通过拖放删除了 NSStatusItem
Detect when a NSStatusItem has been removed via drag and drop
可以将NSStatusItem's
behaviour
属性设置为removalAllowed
(NSStatusItemBehaviorRemovalAllowed
)
然后用户可以使用拖放操作从状态栏中删除该项目。
示例:从状态栏中删除 WiFi 状态项
但是,我无法检测到状态栏何时被删除,因此我可以记住它并且不会在用户下次启动应用程序时显示它。没有委托或通知,statusBar
属性 是 readonly 所以我不能覆盖 setter.
有什么想法吗? :)
NSStatusItemBehaviorRemovalAllowed
的 documentation 说:
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
。
可以将NSStatusItem's
behaviour
属性设置为removalAllowed
(NSStatusItemBehaviorRemovalAllowed
)
然后用户可以使用拖放操作从状态栏中删除该项目。
示例:从状态栏中删除 WiFi 状态项
但是,我无法检测到状态栏何时被删除,因此我可以记住它并且不会在用户下次启动应用程序时显示它。没有委托或通知,statusBar
属性 是 readonly 所以我不能覆盖 setter.
有什么想法吗? :)
NSStatusItemBehaviorRemovalAllowed
的 documentation 说:
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
。