在即時(shí)通訊APP中赞厕,一般都有自己的表情耙册,當(dāng)在輸入框輸入表情時(shí)界弧,點(diǎn)擊刪除按鈕捡需,需要將"[表情名稱]"這樣的字符串刪除办桨,如下效果圖:
思路如下:
先通過(guò)正則表達(dá)式以 [] 的形式的數(shù)組,數(shù)組里面存放的是NSTextCheckingResult站辉,NSTextCheckingResult里面有一個(gè)range呢撞,得到匹配的一個(gè)表情字符串的起始位置及長(zhǎng)度
刪除末尾的字符串只需取出數(shù)組的最后一個(gè)元素即可,再通過(guò)range得到末尾的一個(gè)表情字符串
再遍歷所有的表情字符串?dāng)?shù)組self.plistFaces饰剥,如果某個(gè)表情字符串與正則匹配出的最后一個(gè)表情字符串一樣殊霞,那么刪除末尾的那個(gè)表情字符串,這里要判斷一下汰蓉,如果textview末尾不是已表情字符串結(jié)束绷蹲,而是以普通文字結(jié)束,那么直接調(diào)用[textview deleteBackward]方法刪除普通文字。
到此結(jié)束祝钢,上代碼:
#pragma mark 刪除表情按鈕處理
- (void) deleteEmojiStringAction
{
NSString *souceText = self.textView.text;
NSRange range = self.textView.selectedRange;
if (range.location == NSNotFound) {
range.location = self.textView.text.length;
}
if (range.length > 0) {
[self.textView deleteBackward];
return;
}else
{
//正則匹配要替換的文字的范圍
//正則表達(dá)式
NSString * pattern = @"\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]";
NSError *error = nil;
NSRegularExpression * re = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
if (!re) {
NSLog(@"%@", [error localizedDescription]);
}
//通過(guò)正則表達(dá)式來(lái)匹配字符串
NSArray *resultArray = [re matchesInString:souceText options:0 range:NSMakeRange(0, souceText.length)];
NSTextCheckingResult *checkingResult = resultArray.lastObject;
for (NSString *faceName in self.plistFaces) {
if ([souceText hasSuffix:@"]"]) {
if ([[souceText substringWithRange:checkingResult.range] isEqualToString:faceName]) {
NSLog(@"faceName %@", faceName);
NSString *newText = [souceText substringToIndex:souceText.length - checkingResult.range.length];
self.textView.text = newText;? ? ? ? ? ? ? ? ? ? return;
}
}else
{
[self.textView deleteBackward];
return;
}
}
}
}