Как отправить действие из элемента NSToolbar в первый ответчик TabViews

Я хочу, чтобы элементы NSToolbar моего приложения Mac вызывали действия объекта первого ответчика. У меня есть приложение со следующим макетом раскадровки:

введите здесь описание изображения

Как видите, на панели инструментов окна есть кнопка (Test Action). Он связан с функцией действия объекта первого ответчика. Сама функция реализована в первом контроллере представления TabView.

class ViewController: NSViewController {
    @IBAction func testAction(_ sender: Any) {
        print("testAction")
    }
}

Однако действие никогда не срабатывает. Если я помещу то же самое действие в TabViewController, оно сработает.

Если я установлю свойство nextRespodner TabViewController для ViewController, это не поможет:

class TabViewController: NSTabViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        nextResponder = children.first // Does not help
    }
}

Почему-то цепочка респондентов работает не так, как я ожидал. У кого-нибудь есть решение? Вот пример проекта для проблемы: https://github.com/Iomegan/ResponderChainStoryboard


person Daniel    schedule 22.10.2018    source источник
comment
Проблема исчезнет, ​​когда вы добавите фокусируемый элемент управления в представление.   -  person Willeke    schedule 23.10.2018


Ответы (1)


Добавьте это к ViewController:

override func viewDidAppear() {
    super.viewDidAppear()
    view.window?.makeFirstResponder(self)
}
person pointum    schedule 22.10.2018