首页 > 解决方案 > 为什么我的视图控制器不接受按键输入?

问题描述

我的故事板文件中有以下测试设置:


在此处输入图像描述


我希望发生以下事情:


这是我使用的代码:

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!")
    }
}

当我运行它时,会发生以下情况:


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

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

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


最后,这篇文章可以提炼成两个问题:

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


谢谢您的帮助

标签: swiftmacos

解决方案


推荐阅读