iOS UItextView针对删除表情特殊字符串处理

UItextView针对删除表情特殊字符串处理

1.监听键盘删除键,调用以下方法

2.判断特殊表情字符串格式,我的特殊表情字符串格式为"[xx]",字符长度为4

需注意两个特殊情况:

1.当监听键盘删除键的条件为if(text.length == 0 && range.length == 1)时,长按textView字符串调用系统UIMenuController选择且只选择一个字符串删除时也恰好符合该条件,须另外处理;

2.当判断要删除的字符符合表情特殊字符“]”首要条件时而“]”前的的字符串长度不足4个时也须另外处理;

以下代码中均有详细处理

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


{

    if(text.length == 0 && range.length == 1) //删除

    { // 用于针对删除表情特殊字符串处理

        // 1.特殊情况长按调用系统UIMenuController只选择一个字符串删除

        if (_InputTextView.selectedRange.length == 1) { // 选定的文本长度

            return YES;

//       int loction = _InputTextView.selectedRange.location;// 获取光标位置

//       // 获取光标前一个字符串

//       unichar strxmlchar = [_InputTextView.text characterAtIndex:(loction -1 )];

//       NSString *str=[NSString stringWithFormat:@"%C",strxmlchar];


       }

        NSInteger loction = _InputTextView.selectedRange.location;// 获取光标位置

        NSString *frontContent = [_InputTextView.text substringToIndex:loction];// 获取光标位置前的字符串

        // 字符串以结尾比较,存在“]”

        if ([frontContent hasSuffix:@"]"])

        {

            NSInteger stringLength = frontContent.length;

            NSString *string = nil;

            BOOL exist = NO;

            if ( stringLength >= 4 )// 表情转义字符的长度( [1个长度,xx2个长度,,]1个长度,共4个长度

            { // 符合表情特殊字符串条件

                string = [frontContent substringFromIndex:stringLength - 4];// 截取此时字符串的后四位

                NSRange range = [string rangeOfString:@"["];// 判断首位是否存在“[”

                if ( range.location == 0 ) { // 存在表情特殊字符串

                    string = [frontContent substringToIndex:[frontContent rangeOfString:FACE_NAME_HEAD options:NSBackwardsSearch].location];// 将获取的光标位置前的字符串删减表情特殊字符串(四个字符)

                    exist = YES;

                }

                else { // 不存在表情特殊字符串

                    string = [frontContent substringToIndex:stringLength - 1];

                    exist = NO;

                }

                

            }

            else

            {

                return YES;

            }

            

            NSString *backContent = [_InputTextView.text substringFromIndex:loction];// 获取光标位置后的字符串

            if (backContent.length > 0) {

                // 拼接删除字符后的字符串

                _InputTextView.text = [string stringByAppendingString:backContent];

            }

            else

                _InputTextView.text = string;

            NSRange range;

            range.length = 0;

            if (exist) {

                range.location = loction - FACE_NAME_LEN;

            }

            else{

                range.location = loction - 1;

            }

            _InputTextView.selectedRange = range; // 调整光标位置

            return NO;

            

        }

        else

            return YES;

        

    }


   return YES;

}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值