Как обнаружить клавиши со стрелками при создании подкласса UIView? - PullRequest
1 голос
/ 21 мая 2019

Обычно я хочу что-то сделать, когда нажата одна из клавиш со стрелками.

Я прочитал много разных вопросов. Многие из них говорят о keyDown, но это для NSViewController или NSWindow ( это и это (документация Apple)). Я думал, что был на что-то, когда я использовал это:

func setKeys() {
    let up = UIKeyCommand(input: UIKeyCommand.inputUpArrow, modifierFlags: [], action: #selector(upPressed))
}

@objc func upPressed() {
    print("Hello")
}

Однако, upPressed() даже не вызывается. Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 21 мая 2019

Вы не используете возвращенный экземпляр UIKeyCommand up.

Apple: "После создания объекта ключевой команды вы можете добавить его в контроллер представления, используя addKeyCommand: метод контроллера представления. Вы также можете переопределить любой класс респондента и вернуть команду ключа непосредственно из свойства keyCommands респондента. «

class Test: UIViewController{

   func viewDidLoad(){
       super.viewDidLoad()
       setKeys()
   }

   func setKeys() {
      let up = UIKeyCommand(input: UIKeyCommand.inputUpArrow, modifierFlags: [], action: #selector(upPressed))
      self.addKeyCommand(up)
   }

   @objc func upPressed() {
      print("Hello")
   }
}



Протестировано это с помощью симулятора и аппаратной клавиатуры.

ДОПОЛНИТЕЛЬНО: Если вы собираетесь реализовать его через UIView напрямую, вы должны сделать следующее: «... Вы также можете переопределить любой класс респондента и вернуть команду ключа непосредственно из свойства keyCommands респондента». поскольку UIView соответствует UIResponder

class CustomView: UIView{
    override var keyCommands: [UIKeyCommand]? {
       return  [UIKeyCommand(input: UIKeyCommand.inputUpArrow, modifierFlags: [], action: #selector(upPressed))]
    }

    @objc func upPressed(){
        print("hello world")
    }

}

...