这种需求一般是聊天服务器遇到,因为这些表情符号可能会造成服务器无法解析,造成乱码的情况,
所以一般在客户端就禁止输入一些苹果自带的表情符号,例如下图:
这时我们需要禁用表情,一般的做法有将表情符号替换成空字符,或者,在输入的时候,就不让输入,在此我选用第二种,因为不需要太多的操作。
具体做法不多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已经弃用了哦,
最好还是按上边的截图去处理表情符号禁止输入.