You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:05:08