【发布时间】:2016-08-29 22:18:28
【问题描述】:
我相信这是一个与 UIKeyCommands、ViewController 和/或响应者的层次结构相关的重要问题。
在我的 iOS 9.2 应用程序中,我有一个名为 NiceViewController 的类,它定义了 UIKeyCommand,它会在控制台打印一些东西。
这里是NiceViewController:
class NiceViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let command = UIKeyCommand(input: "1", modifierFlags:UIKeyModifierFlags(),
action: #selector(keyPressed), discoverabilityTitle: "nice")
addKeyCommand(command)
}
func keyPressed() {
print("works")
}
}
当我将 NiceViewController 作为唯一的孩子添加到我的主视图控制器时,一切正常 - 按下外部键盘上的按钮“1”(在模拟器中使用时为物理键盘)就像一个魅力。但是,当我向主视图控制器添加第二个视图控制器时,NiceViewController 中定义的 UIKeyCommands 停止工作。
我很想了解为什么会发生这种情况以及如何确保将多个子视图控制器连接到我的主视图控制器不会阻止这些子视图控制器处理 UIKeyCommands。
这是我的主视图控制器:
class MainViewController: UIViewController {
let niceViewController = NiceViewController()
let normalViewController = UIViewController()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(niceViewController.view)
self.addChildViewController(niceViewController)
self.view.addSubview(normalViewController.view)
// removing below line makes niceViewController accept key commands - why and how to fix it?
self.addChildViewController(normalViewController)
}
}
【问题讨论】:
-
切换添加子视图控制器的顺序会改变观察到的结果吗?
-
@LeonidUsov 我尝试了两个命令,结果完全一样。
标签: ios swift uiviewcontroller first-responder becomefirstresponder