iOS禁止输入emoji表情

  • 格式:docx
  • 大小:17.57 KB
  • 文档页数:6

1/ iOS禁止输入emoji表情 有朋友在询问,如何屏蔽emoji表情输入的问题,因为苹果自带的表情在其他设备上不支持。

思路,在textfeild或者textview中,键入时候先判读是不是emoji的内容,如果是,就不返回给编辑框。

代码如下: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{ DLog(@"[[UITextInputMode currentInputMode]primaryLanguage] is %@",);

if ([[[UITextInputMode currentInputMode]primaryLanguage] isEqualToString:@"emoji"]) {

return NO; } return YES;

2/ 因为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; } }

3/ 思路:禁用了表情键盘 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{ DLog(@"[[UITextInputMode currentInputMode]primaryLanguage] is %@",); if ([[[UITextInputMode currentInputMode]primaryLanguage] isEqualToString:@"emoji"]) { return NO; } return YES; }

3/ 调用方法:

在输入框的代理方法中使用

- (void)textViewDidChange:(UITextView *)textView{

NSLog(@"text:%@",textView.text);

if (textView.text.length <= TEXT_MAXLENGTH) {

label2.text = [NSString stringWithFormat:@"您还可以输入%lu个

文字",TEXT_MAXLENGTH-[textView.textlength]]; } //该判断用于联想输入 if (textView.text.length > TEXT_MAXLENGTH){ textView.text = [textView.text substringToIndex:TEXT_MAXLENGTH]; }

}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text{

//判断加上输入的字符,是否超过界限 NSString *string = [NSString stringWithFormat:@"%@%@", textView.text, text]; if (string.length > TEXT_MAXLENGTH){ return NO; } // 限制苹果系统输入法 禁止输入表情 if ([[[UITextInputMode currentInputMode]primaryLanguage] isEqualToString:@"emoji"]) { return NO; }

//禁止输入emoji表情 if ([LGToolMethods stringContainsEmoji:text]) { return NO; }

return YES; }

//判断是否输入了emoji 表情 + (BOOL)stringContainsEmoji:(NSString *)string{ __block BOOL returnValue = NO;

[string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRangeenclosingRange, BOOL *stop) { const unichar hs = [substring characterAtIndex:0]; 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) { returnValue = YES;