13

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

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

谢谢!!

4

2 回答 2

40

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

迅速

对于 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...
}

希望能帮助到你 。

于 2013-04-15T13:51:29.710 回答
1

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

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

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

于 2013-04-15T13:46:38.720 回答