После этого вопроса и пример документации. Я попытался реализовать фрагмент кода, который включает и отключает две кнопки (Отменить и Повторить) на панели инструментов macOS.
override func validateToolbarItem(_ toolbarItem: NSToolbarItem) -> Bool {
var enable = false
if toolbarItem.itemIdentifier.isEqual("undoButton") {
enable = (mainTextField.undoManager?.canUndo)!
}
else if toolbarItem.itemIdentifier.isEqual("redoButton") {
enable = (mainTextField.undoManager?.canRedo)!
}
return enable
}
К сожалению, похоже, что код не действует. Что мне не хватает?
Ответ 1 · рейтинг 2 · El Tomato
enum toolItems:Int {
case undo = 0
case redo = 1
}
// creating an array at the beginning (AppleDelegate, windowDidLoad, ...) //
func makeToolbar() {
toolbarItemState.insert("1", at: toolItems.undo.rawValue) // 0
toolbarItemState.insert("0", at: toolItems.redo.rawValue) // 1
}
override func validateToolbarItem(_ toolbarItem:NSToolbarItem) -> Bool {
var enable:Bool = false
if ((toolbarItemState[toolbarItem.tag] as AnyObject).integerValue == 1) {
enable = true
}
return enable
}
func editToolItem(index:Int,state:String) -> Void {
toolbarItemState.replaceObject(at: index, with: state)
}
Когда приложение запустится, создайте массив toolbarItemState. Если вы хотите, например, изменить состояние элемента панели инструментов отмены на "включено",
editToolItem(index: toolItems.savePict.undo, state: "1")
. Теперь элемент панели инструментов отмены один. Если вы установите состояние на "0", кнопка будет отключена.