我使用字符串数组来表示这样的表情符号:
NSArray *emoticons = @[@"[smile]",@"[cry]",@"[happy]" ...]
然后在UITextView中显示如下字符串:
I'm so happy now [happy] now [smile]
当我点击后退或删除按钮时,如果最后一个单词是表情符号,我希望删除整个表情符号字符串,不是最后一个字符。
有什么想法吗?
答案 0 :(得分:1)
试试这个,
NSString *string = self.textView.text;
__block NSString *deleteWord = nil;
__block NSRange rangeOfWord;
[string enumerateSubstringsInRange:NSMakeRange(0, self.textView.selectedRange.location + self.textView.selectedRange.length) options:NSStringEnumerationByWords | NSStringEnumerationReverse usingBlock:^(NSString *substring, NSRange subrange, NSRange enclosingRange, BOOL *stop) {
deleteWord = substring;
rangeOfWord = enclosingRange;
*stop = YES;
}];
if ([emoticons containsObject:deleteWord]) {
string = [string stringByReplacingCharactersInRange:rangeOfWord withString:@""];
self.textView.text = string;
self.textView.selectedRange = NSMakeRange(rangeOfWord.location, 0);
}
答案 1 :(得分:0)
使用UITextViewDelegate
方法textView:shouldChangeTextInRange:replacementText:检查即将删除的内容并移除整个[emoticon]
字词,您可能会达到相应的效果。
答案 2 :(得分:0)
我告诉你我用过的想法。
因为你没有提到你用作表情符号的内容 但对于删除逻辑,我想你会从我的代码中得到一些想法。
if ([string isEqualToString:@""]) {
NSString *lastChar = [txthiddenTextField.text substringFromIndex: [txthiddenTextField.text length] - 1];
NSLog(@"Last char:%@",lastChar);
txthiddenTextField.text = [txthiddenTextField.text substringToIndex:[txthiddenTextField.text length] - 1];
NSString *strPlaceHolder;
strPlaceHolder = txthiddenTextField.text;
if([lastChar isEqualToString:@"]"])
{
int j = 1;
for (int i = [txthiddenTextField.text length]-1; i >=0; --i)
{
NSString *lastChar = [txthiddenTextField.text substringFromIndex: [txthiddenTextField.text length] - 1];
if([lastChar isEqualToString:@"["])
{
NSLog(@"%d",j);
txthiddenTextField.text = [txthiddenTextField.text substringToIndex:[txthiddenTextField.text length] - 1];
// NSLog(@"Processing character %@",strPlaceHolder);
break;
}
txthiddenTextField.text = [txthiddenTextField.text substringToIndex:[txthiddenTextField.text length] - 1];
j = j+1;
}
}
NSLog(@"My text fild value :%@",txthiddenTextField.text);
return YES;
}
所以,从这里你必须检查结束括号是否来了。
如果关闭括号将到达开启括号,您必须删除。
然后整个表情符号将被删除。
希望这会有所帮助......