【问题标题】:How to detect Keyboard key pressed in iphone?如何检测iphone中按下的键盘键?
【发布时间】:2013-04-07 15:48:46
【问题描述】:

我想检测用户何时按下任何键盘键。

仅在键入任何字符时调用而不是在显示键盘时调用的任何方法。

谢谢!!

【问题讨论】:

  • 我有一个问题要问你,如果没有显示键盘,用户如何输入任何内容?
  • 这里的答案很好。 stackoverflow.com/questions/5216245/…
  • 你在使用文本字段吗?检查 [this][1] [1]: stackoverflow.com/questions/7010547/…
  • @OscarGomez 如果我没记错的话,这在使用蓝牙键盘或键盘底座时是可能的。
  • 这对于翻页设备(蓝牙 HID 键盘)也很有用。

标签: iphone ios objective-c


【解决方案1】:

您可以在用户每次按键时直接处理键盘事件:

斯威夫特

对于 Textfield,请使用以下委托方法 -

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

}

对于 TextView 使用以下委托方法 -

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

}

目标 C

如果是UITextField

- (BOOL)textField:(UITextField *)textField
          shouldChangeCharactersInRange:(NSRange)range
          replacementString:(NSString *)string {

    // Do something here...
}

如果是 UITextView

- (BOOL)textView:(UITextView *)textView
      shouldChangeTextInRange:(NSRange)range 
      replacementText:(NSString *)text {

    // Do something here...
}

因此,每次使用键盘按下的每个键都会调用其中一个方法。

您也可以使用 NSNotificationCenter。您只需要在 ViewDidLoad 方法中添加任何这些。

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

UITextField:

[notificationCenter addObserver:self
                       selector:@selector(textFieldText:)
                           name:UITextFieldTextDidChangeNotification
                         object:yourtextfield];

然后你可以把你的代码放到方法textFieldText::

- (void)textFieldText:(id)notification {

    // Do something here...
}

UITextView

[notificationCenter addObserver:self
                       selector:@selector(textViewText:)
                           name:UITextViewTextDidChangeNotification
                         object:yourtextView];

然后你可以把你的代码放到方法textViewText::

- (void)textViewText:(id)notification {

    // Do something here...
}

希望对您有所帮助。

【讨论】:

  • 如果我有一个 UITextView 并且我按下 ReturnKey,那么 textViewDidChange 方法也会被调用。有没有办法识别键盘上按下了哪个键?
  • UIWebView 中的按键呢?
  • 注意:如果文本字段为空并且您按下删除键,则不会调用 shouldChangeTextInRange:。文本字段似乎检测到该字段没有更改,因此不需要触发委托方法 = /
  • 如果用户按下 shift 键会发送什么值?
  • iPhone 键盘上没有 shift 键。
【解决方案2】:

假设键盘显示为用户点击 UITextfield 的结果,您可以让自己成为委托并实现此方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

每次用户按键时都会调用它。

【讨论】:

  • 每次都会调用,但如果用户清除所有文本,则不会调用
  • 如果文本字段为空并按后退空格按钮它不会调用。
猜你喜欢
  • 1970-01-01
  • 2018-10-24
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多