Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: CueОтветов: 1

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

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

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

swiftcocoatoolbar

Ответы

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы