美文网首页iOS9开发技术tomImage
[iOS]iOS7系统下multistage text inpu

[iOS]iOS7系统下multistage text inpu

作者: 肖浩呗 | 来源:发表于2016-09-05 17:29 被阅读617次

前情描述

[iOS]UITextView限制字数的写法(一)
需要在iOSApp中完成一个限制字符个数60个的textView编辑框,一般实现的方式是

- (void)textViewDidChange:(UITextView *)textView
{  
    if ([textView.text length] > 60) 
    { 
        textView.text = [textView.text substringWithRange:NSMakeRange(0, 60)]; 
        [textView.undoManager removeAllActions]; 
        [textView becomeFirstResponder]; 
        return; 
    }
}

遇到的问题

但是在iOS7系统中,粘贴完达到限制个数的字符个数后,可以退格删除,再使用中文输入法进行输入,这时候进入multistage text input模式,会触发的问题

Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray replaceObjectsInRange:withObject:length:: Out of bounds' 

解决方案

由于中文输入法的键盘上有联想、推荐的功能,所以可能导致文本内容长度上有些不符合预期,导致越界,所以可以参考�以下做下处理:
添加textView.markedTextRange == nil联想提示条的判断

- (void)textViewDidChange:(UITextView *)textView
{  
    if (textView.markedTextRange == nil && [textView.text length] > 60) 
    { 
        textView.text = [textView.text substringWithRange:NSMakeRange(0, 60)]; 
        [textView.undoManager removeAllActions]; 
        [textView becomeFirstResponder]; 
        return; 
    }
}

相关文章

网友评论

    本文标题:[iOS]iOS7系统下multistage text inpu

    本文链接:https://www.haomeiwen.com/subject/rvirettx.html