如何让键盘禁止输入Emoji 表情,以及九宫格键盘的坑

2018-12-10  本文已影响12人  JohnXych

在开发中我们有时候会遇到一些需求 ,比如就是我们接下来要谈的内容 就是输入框内禁止输入Emoji表情,那么我可以用如下方法来实现,

// 是否包含emoji

-(BOOL)stringContainsEmoji:(NSString*)string

{

    __blockBOOLreturnValue =NO;

    [stringenumerateSubstringsInRange:NSMakeRange(0, [string length])

                               options:NSStringEnumerationByComposedCharacterSequences

                            usingBlock:^(NSString*substring,NSRangesubstringRange,NSRangeenclosingRange,BOOL*stop) {

                                constunicharhigh = [substringcharacterAtIndex:0];

                                // Surrogate pair (U+1D000-1F9FF)

                                if(0xD800<= high && high <=0xDBFF) {

                                    constunicharlow = [substringcharacterAtIndex:1];

                                    constintcodepoint = ((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;

                                    }

                                }

                            }];

    returnreturnValue;

}


然后测试完全过滤掉了我们平常通用的Emoji表情,但是你会发现一个问题,当你的键盘切换到中文的九宫格的时候,键盘会卡主 无法输入 无法选择要输入的字,当你debug的时候 你会发现 点击的九宫格变成了➋➌ … ➒中模样,这显然也是emoji表情呀,所以我们还需要顾虑这些特殊字符

在代码中加上这句判断,就可以完美解决问题了!

关于判断一字符串是否包含 Emoji 表情的方法,一般是通过 Unicode 编码范围来判断 ,详见这里:判别Emoji表情

方法名是这个:- (BOOL)stringContainsEmoji:(NSString *)string;

上一篇下一篇

猜你喜欢

热点阅读