子类化UIView时如何检测箭头键?

时间:2019-05-21 00:27:54

标签: ios swift uiview keyboard subclass

基本上,我想在按下箭头键之一时做些什么。

我读了许多不同的问题。他们中的许多人谈论keyDown,但这是针对NSViewControllerNSWindowthisthis(Apple Documention))的。我以为使用此功能时会觉得自己很陌生:

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

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

但是,upPressed()甚至没有被调用。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

您没有使用返回的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")
    }

}