Я считаю, что это нетривиальная проблема, связанная с 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)
}
}