关于iOS禁止输入表情符号

本文介绍了一种在iOS应用中禁用特定表情符号输入的方法,通过检查并阻止特定的Unicode字符来实现,适用于聊天应用等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种需求一般是聊天服务器遇到,因为这些表情符号可能会造成服务器无法解析,造成乱码的情况,

所以一般在客户端就禁止输入一些苹果自带的表情符号,例如下图:


这时我们需要禁用表情,一般的做法有将表情符号替换成空字符,或者,在输入的时候,就不让输入,在此我选用第二种,因为不需要太多的操作。

具体做法不多BB直接上图和代码:


- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
 replacementText:(NSString *)text {
    
    NSLog(@"emoji:%@",text);
    
    if ([@"\n" isEqualToString:text] == YES) {
        [self.view endEditing:NO];
        return NO;
    }else{
        if ([self stringContainsEmojiLast:text]) {
            return NO;
        }else{
            return YES;
        }
        return YES;
    }
}
//判断是否有emoji
-(BOOL)stringContainsEmojiLast:(NSString *)string {
    __block BOOL returnValue = NO;
    
    //九宫格 汉字 获取到的是圈123这样的
    //要可以输入
    if ([string isEqualToString:@"➋"]||[string isEqualToString:@"➌"]||[string isEqualToString:@"➍"]||[string isEqualToString:@"➎"]||[string isEqualToString:@"➏"]||[string isEqualToString:@"➐"]||[string isEqualToString:@"➑"]||[string isEqualToString:@"➒"]) {
        return returnValue;
    }
    
    
    
    [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
        const unichar high = [substring characterAtIndex: 0];
        // Surrogate pair (U+1D000-1F9FF)
        if (0xD800 <= high && high <= 0xDBFF) {
            const unichar low = [substring characterAtIndex: 1];
            const int codepoint = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
            if (0x1D000 <= codepoint && codepoint <= 0x1F9FF){
                returnValue = YES;
            }
            // Not surrogate pair (U+2100-27BF)
        } else {
            if (0x2100 <= high && high <= 0x27BF){
                returnValue = YES;
            }
        }
    }];
    return returnValue;
}

最后友情提醒下,想要获取到表情键盘模式,禁止输入的朋友,汉字里边打出一些特别的词语,还是可以选在表情符号的,例如“哈哈”,这样还是要在输入里处理;

并且

[[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"emoji"]

在7.0已经弃用了哦,

最好还是按上边的截图去处理表情符号禁止输入.







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值