Я считаю, что это нетривиальная проблема, связанная с UIKeyCommands
, иерархией ViewControllers и/или респондентов.
В моем приложении 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» на внешней клавиатуре (физическая клавиатура при использовании в симуляторе) работает как шарм. Однако, когда я добавляю второй контроллер представления к моему основному контроллеру представления, UIKeyCommands
, определенный в NiceViewController
, перестает работать.
Я хотел бы понять, почему это происходит и как убедиться, что наличие нескольких дочерних контроллеров представления для моего основного контроллера представления не мешает этим дочерним контроллерам представления обрабатывать 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)
}
}