为什么我的视图控制器无法获取关键输入?

时间:2018-05-10 13:19:57

标签: swift macos

我在 storyboard 文件中进行了以下测试设置:

enter image description here

我希望发生以下事情:

  • Window 1 打开时按任意键时打印消息
  • 按下下一步按钮时打开 Window 2
  • ViewController 中的变量传递给 SecondViewController
  • Window 2 打开时按任意键时打印消息

这是我使用的代码:

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
            }
        }
    }

}

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 < / LI>

这些是我自己做出的结论:

变量没有从第一个控制器传递到第二个控制器,因为segue位于 ViewController Window2 之间,而不是 SecondViewController 。但是,当我将segue从 ViewController 更改为 SecondViewController 时,显示 SecondViewController 的窗口无法从 Window获取属性2 。 我不知道如何在视图控制器之间发送变量,还要知道如何同时向显示这些控制器的窗口设置属性。

至于按键,我不知道它为什么不能工作。每当我打开任何一个窗口时按一个键,我都会听到一个错误的声音。我已经尝试通过调用 self.becomeFirstResponder()手动将视图控制器设置为两个控制器中 viewDidLoad()方法中的第一个响应者,但是这样做了没有不同。我在网上搜索过,但没有找到任何描述或讨论类似问题的信息,文档或文献。

最后,这篇文章可以分为两个问题:

1 |如何在视图控制器之间发送变量,同时仍然保持窗口控制器的属性? 的 2 |如何正确按键    在多个窗口中处理?

感谢您的帮助

0 个答案:

没有答案