处理textField中的非ascii字符:shouldChangeCharactersInRange:replacementString:

时间:2011-01-17 14:21:32

标签: iphone objective-c cocoa-touch ipad ios

我正在尝试阻止中文(或其他所有非ascii字符)输入到UITextField中。正如其他帖子中所见,我实现了textField:shouldChangeCharactersInRange:replacementString:,但是当我按下几个键后出现在键盘顶部的word-list-thing中输入中文单词时,textField:shouldChangeCharactersInRange:replacementString:方法没有火。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

[[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];
}

但请注意,由于您每次都会更换整个字符串,因此费用会更高,但如果您不期待非常长的字符串,则应该没问题。