【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《iOS禁止输入emoji表情》,欢迎阅读!
iOS禁止输入emoji表情
因为emoji编码在android或者pc设备没有很好的支持,所以有时候为了禁止emoji表情的输入,因为关闭不了系统emoji的键盘,那只能根据编码把emoji表情过滤掉,写了一个NSString的拓展,用来判断是不是emoji编码: @implementation NSString(Emoji)
+(BOOL)isContainsEmoji:(NSString *)string {
__block BOOL isEomji = NO;
[string enumerateSubstringsInRange:NSMakeRange(0,
[string length]) options:NSStringEnumerationByComposedCharacterSequencesusingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
const unichar hs = [substring characterAtIndex:0]; // surrogate pair
if (0xd800 <= hs && hs <= 0xdbff) { if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1];
const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; if (0x1d000 <= uc && uc <= 0x1f77f) { isEomji = YES; } }
} else if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1]; if (ls == 0x20e3) { isEomji = YES; }
} else {
// non surrogate
if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) { isEomji = YES;
} else if (0x2B05 <= hs && hs <= 0x2b07) { isEomji = YES;
} else if (0x2934 <= hs && hs <= 0x2935) { isEomji = YES;
} else if (0x3297 <= hs && hs <= 0x3299) { isEomji = YES;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs
== 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50|| hs == 0x231a ) {
isEomji = YES; } } }];
return isEomji; }
这样在textview或textfield的delegate判断一下,即可禁止输入emoji,如下: - (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//emoji无效
if([NSString isContainsEmoji:string]) {
return NO;
} }
当然,最好的方法还是做一套emoji的编码解码,以支持其他非ios设备。不然禁止这个功能有点说不过去。
本文来源:https://www.wddqxz.cn/69288cb8453610661ed9f4a4.html