防止 NSToolbarItem 被移除

问题描述

我想防止用户删除某些工具栏项目。它们应该仍然是可移动的,只是不能重新移动。

我尝试使用自定义 NSToolbar 实现创建 removeItem(at:)自定义子类,但如果用户将项目拖出自定义面板中的工具栏,似乎甚至不会调用方法

委托似乎也没有为此公开功能

如何禁止删除某些 NSToolbarItem

解决方法

我不确定您是否可以阻止它被删除,但您可以实现可选的 toolbarDidRemoveItem 方法并插入您不希望它被删除的项目:

t2
,

因为在私有 API 调用停止工作的情况下删除它们并不是非常重要,所以我选择了私有 API 解决方案。

extension NSToolbarItem {

    func setIsUserRemovable(_ flag: Bool) {
        let selector = Selector(("_setIsUserRemovable:"))
        if responds(to: selector) {
            perform(selector,with: flag)
        }
    }
}

这与宣传的完全一样。