Как реализовать validateToolbarItem(_:)?

После этого вопроса и пример документации. Я попытался реализовать фрагмент кода, который включает и отключает две кнопки (Отменить и Повторить) на панели инструментов 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
}

К сожалению, похоже, что код не действует. Что мне не хватает?


person Cue    schedule 16.06.2017    source источник
comment
validateToolbarItem вызывается для цели элемента панели инструментов. Является ли элемент панели инструментов элементом панели инструментов изображения или элементом панели инструментов просмотра/управления? Документация: Проверка элементов панели инструментов.   -  person Willeke    schedule 16.06.2017


Ответы (1)


    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», кнопка будет отключена.

person El Tomato    schedule 16.06.2017