如何在UITextView的字符过滤规则中允许回车键作为可接受字符?
嘿,我来帮你搞定这个问题!你遇到的核心问题是用错了换行符的表示方式,代码里还有个小笔误需要修正,咱们一步步来解决:
首先,你添加的"\^N"完全不对——在Objective-C的字符串里,键盘回车键对应的换行符是@"\n",另外为了兼容可能的回车符@"\r",最好也一起加进允许字符集里。
然后看你的代码,你明明定义了ACCEPTABLE_CHARACTERS,但创建字符集的时候却用了Regex变量?这明显是笔误,得改成ACCEPTABLE_CHARACTERS才行,不然你的过滤规则根本没用到你定义的允许字符列表。
第一步:修正允许字符集的定义
把换行符和回车符加入允许列表:
#define ACCEPTABLE_CHARACTERS @" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!~`@#$%^&*-+();:=_{}[],.<>?\\/|\"\'0123456789\n\r"
第二步:修正过滤代码的笔误
把代码里的Regex替换成ACCEPTABLE_CHARACTERS:
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet]; NSString *filtered = [[textView.text componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; textView.text = filtered;
额外优化:提前拦截输入(推荐)
你现在的写法是在文本变化后再修改内容,容易导致光标位置错乱。推荐用UITextViewDelegate的方法提前拦截不允许的字符,体验更流畅:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSCharacterSet *allowedChars = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS]; // 逐个检查输入的字符是否在允许列表内 for (NSInteger i = 0; i < text.length; i++) { unichar currentChar = [text characterAtIndex:i]; if (![allowedChars characterIsMember:currentChar]) { return NO; // 拒绝输入该字符 } } return YES; // 允许输入 }
记得要给你的UITextView设置delegate哦!
最后再确认下:你已经在检查器里开启了回车键的相关设置,这个没问题,现在只要修正字符集和代码笔误,回车键就能正常被允许输入啦。
内容的提问来源于stack exchange,提问作者Michael Lau
相关产品推荐
相关产品推荐

