Swift 防止拆下NSToolbarItem
我想防止用户删除某些工具栏项目。它们仍然应该是可移动的,只是不能移动 我尝试使用自定义的Swift 防止拆下NSToolbarItem,swift,macos,cocoa,appkit,Swift,Macos,Cocoa,Appkit,我想防止用户删除某些工具栏项目。它们仍然应该是可移动的,只是不能移动 我尝试使用自定义的removietem(at:)实现创建NSToolbar的自定义子类,但如果用户从自定义调色板中的工具栏中拖出一个项目,似乎甚至不会调用此方法 委托似乎也没有为此公开功能 如何禁用删除某些NSToolbarItems?我不确定您是否可以阻止删除它,但您可以实现可选的toolbardiremoveItem方法并插入不希望删除的项目: import Cocoa class WindowController: N
removietem(at:)
实现创建NSToolbar
的自定义子类,但如果用户从自定义调色板中的工具栏中拖出一个项目,似乎甚至不会调用此方法
委托似乎也没有为此公开功能
如何禁用删除某些
NSToolbarItem
s?我不确定您是否可以阻止删除它,但您可以实现可选的toolbardiremoveItem方法并插入不希望删除的项目:
import Cocoa
class WindowController: NSWindowController, NSToolbarDelegate {
@IBOutlet weak var toolbar: Toolbar!
override func windowDidLoad() {
super.windowDidLoad()
toolbar.delegate = self
}
func toolbarDidRemoveItem(_ notification: Notification) {
if let itemIdentifier = (notification.userInfo?["item"] as? NSToolbarItem)?.itemIdentifier,
itemIdentifier.rawValue == "NSToolbarShowColorsItem" {
toolbar.insertItem(withItemIdentifier: itemIdentifier, at: 0)
}
}
}
由于在私有API调用停止工作的情况下删除它们并不是非常关键,所以我选择了私有API解决方案
extension NSToolbarItem {
func setIsUserRemovable(_ flag: Bool) {
let selector = Selector(("_setIsUserRemovable:"))
if responds(to: selector) {
perform(selector, with: flag)
}
}
}
这与广告中的效果完全一样。似乎有道理,但不幸的是,它无法保留当前物品的位置。@ErikAigner我将尝试找出是否有方法记住其最后位置