Почему мои контроллеры вида не принимают ввод ключа? - PullRequest
0 голосов
/ 10 мая 2018

В моем файле раскадровки есть следующие настройки теста:


enter image description here


Я хочу, чтобы происходили следующие вещи:

  • Печать сообщения при нажатии любой клавиши, когда Окно 1 открыто
  • Открыть Окно 2 при нажатии кнопки Next
  • Передача переменной из ViewController в SecondViewController
  • Печатьсообщение о нажатии любой клавиши при открытии окна 2

Это код, который я использовал:

In ViewController.swift :

import Cocoa

class ViewController: NSViewController {

    var foo = 3

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }


    override func keyUp(with event: NSEvent) {
        print("Key Pressed!")
    }


    override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
        if segue.identifier?._rawValue == "segue" {

            if let destination = segue.destinationController as? SecondViewController {

                destination.foo = foo
            }
        }
    }

}

In SecondViewController.swift :

import Cocoa

class SecondViewController: NSViewController {

    var foo = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        print(foo)
    }

    override func keyUp(with event: NSEvent) {
        print("Key Pressed!")
    }
}

Когда я запускаю этопроисходит следующее:

  • Метод печати при нажатии клавиши не вызывается ViewController
  • Метод печати при нажатии клавиши не вызывается в SecondViewController
  • Значение, напечатанное первым методом печати в SecondViewController , равно 0, что означает, что переменная не была передана из ViewController в SecondViewController

Это выводы, которые я сделал самостоятельно:

Переменная не была передана с первого контроллерако второму, потому что переход между ViewController и Window2 , а не SecondViewController .Однако, когда я изменяю последовательность перехода с ViewController на SecondViewController , окно, представляющее SecondViewController , не получает свойства из Окно 2 .Я не знаю, как отправлять переменные между контроллерами представления, а также устанавливать свойства для окон, одновременно отображающих этот контроллер.

Что касается нажатий клавиш, я понятия не имею, почему это не сработает,Всякий раз, когда я нажимаю клавишу при открытии любого окна, я слышу звук ошибки.Я попытался вручную установить контроллер представления в качестве первого респондента в методе viewDidLoad () в обоих контроллерах, вызвав self.becomeFirstResponder () , но это не имело значения.Я искал в Интернете, но не нашел никакой информации, документации или литературы какого-либо рода, описывающей или обсуждающей подобную проблему.


Наконец, этот пост можно разделить на 2 вопроса:

1 |Как переменные передаются между контроллерами представления при сохранении свойств оконных контроллеров?
2 |Как правильно обрабатывать нажатия клавиш в нескольких окнах?


Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...