Iphone 处理文本字段中的非ascii字符:shouldChangeCharactersRange:replacementString:

Iphone 处理文本字段中的非ascii字符:shouldChangeCharactersRange:replacementString:,iphone,objective-c,cocoa-touch,ipad,ios,Iphone,Objective C,Cocoa Touch,Ipad,Ios,我试图阻止将中文(或所有非ascii字符)输入UITextField。正如在其他帖子中看到的,我实现了textField:shouldChangeCharactersRange:replacementString:,但是当我在键盘顶部的单词列表中输入中文单词时,按下几个键后,textField:shouldChangeCharactersRange:replacementString:方法不会触发 有什么想法吗?您可以采取的解决方法是: [[NSNotificationCenter defaul

我试图阻止将中文(或所有非ascii字符)输入UITextField。正如在其他帖子中看到的,我实现了
textField:shouldChangeCharactersRange:replacementString:
,但是当我在键盘顶部的单词列表中输入中文单词时,按下几个键后,
textField:shouldChangeCharactersRange:replacementString:
方法不会触发


有什么想法吗?

您可以采取的解决方法是:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
然后在您的函数中:

- (void)textChanged:(NSNotification *)notification{
  //remove observer
  [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:nil];

  //change your textfield's value here e.g.
  myTextField.text = [MyUtils removeNonAsciiChar:myTextField.text];

  //add observer again
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
}
但是请注意,这样做的成本更高,因为每次都要替换整个字符串,但是如果您不希望使用很长的字符串,那么这样做应该没问题