В моем файле раскадровки есть следующие настройки теста:
![enter image description here](https://i.stack.imgur.com/kzOgc.png)
Я хочу, чтобы происходили следующие вещи:
- Печать сообщения при нажатии любой клавиши, когда Окно 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 |Как правильно обрабатывать нажатия клавиш в нескольких окнах?
Спасибо за помощь