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

Posted

技术标签:

【中文标题】处理 textField:shouldChangeCharactersInRange:replacementString: 中的非 ascii 字符【英文标题】:Handling non-ascii characters in textField:shouldChangeCharactersInRange:replacementString: 【发布时间】:2011-01-17 14:21:32 【问题描述】:

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

但是请注意,这样做的成本更高,因为您每次都将替换整个字符串,但如果您不希望字符串很长,这应该没问题。

【讨论】:

以上是关于处理 textField:shouldChangeCharactersInRange:replacementString: 中的非 ascii 字符的主要内容,如果未能解决你的问题,请参考以下文章

自然语言处理_一般处理流程

怎么在批处理中加回车命令?

throws关键字_异常处理的第一种方式(交给别人处理)和try_catch_异常处理的第二种方式(自己处理)

PHP异常处理

协处理器,王明学learn

批处理学习笔记第一课:什么是批处理