pragma mark -------UITextViewDelegate
-(BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([textView isFirstResponder]) {
if ([[[textView textInputMode] primaryLanguage] isEqualToString:@"emoji"] || ![[textView textInputMode] primaryLanguage]) {
return NO;
}
//判斷鍵盤是不是九宮格鍵盤
if ([self isNineKeyBoard:text] ){
return YES;
}else{
if ([self hasEmoji:text] || [self stringContainsEmoji:text]){
return NO;
}
}
}
return YES;
}
/**
* 利用下面這個方法stringContainsEmoji可以限制系統(tǒng)鍵盤自帶的表情
* 判斷字符串中是否存在emoji
* @param string 字符串
* @return YES(含有表情)
*/
-
(BOOL)stringContainsEmoji:(NSString *)string {
__block BOOL returnValue = NO;
[string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
^(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) { returnValue = YES; } } } else if (substring.length > 1) { const unichar ls = [substring characterAtIndex:1]; if (ls == 0x20e3) { returnValue = YES; } } else { // non surrogate if (0x2100 <= hs && hs <= 0x27ff) { returnValue = YES; } else if (0x2B05 <= hs && hs <= 0x2b07) { returnValue = YES; } else if (0x2934 <= hs && hs <= 0x2935) { returnValue = YES; } else if (0x3297 <= hs && hs <= 0x3299) { returnValue = YES; } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) { returnValue = YES; } }
}];
return returnValue;
}
/**- 利用下面這個方法hasEmoji可以限制第三方鍵盤(常用的是搜狗鍵盤)的表情
- 判斷字符串中是否存在emoji
- @param string 字符串
- @return YES(含有表情)
*/
-
(BOOL)hasEmoji:(NSString*)string;
{
NSString pattern = @"[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\r\n]";
NSPredicate pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
BOOL isMatch = [pred evaluateWithObject:string];
return isMatch;
}
/- 利用下面這個方法isNineKeyBoard可以判斷當(dāng)前是不是在使用九宮格輸入
- 判斷是不是九宮格
- @param string 輸入的字符
- @return YES(是九宮格拼音鍵盤)
*/
-(BOOL)isNineKeyBoard:(NSString *)string
{
NSString *other = @"????????";
int len = (int)string.length;
for(int i=0;i<len;i++)
{
if(!([other rangeOfString:string].location != NSNotFound))
return NO;
}
return YES;
}