问题描述
我想防止用户删除某些工具栏项目。它们应该仍然是可移动的,只是不能重新移动。
我尝试使用自定义 NSToolbar
实现创建 removeItem(at:)
的自定义子类,但如果用户将项目拖出自定义面板中的工具栏,似乎甚至不会调用此方法。
委托似乎也没有为此公开功能。
解决方法
我不确定您是否可以阻止它被删除,但您可以实现可选的 toolbarDidRemoveItem 方法并插入您不希望它被删除的项目:
t2
,
因为在私有 API 调用停止工作的情况下删除它们并不是非常重要,所以我选择了私有 API 解决方案。
extension NSToolbarItem {
func setIsUserRemovable(_ flag: Bool) {
let selector = Selector(("_setIsUserRemovable:"))
if responds(to: selector) {
perform(selector,with: flag)
}
}
}
这与宣传的完全一样。