今天在创建这个页面的时候遇到了一个UITextView超过设定个数时在代理协议方法中设置不可输入时,需要添加删除操作,否则会造成当达到字数限制后删除键也不能使用的后果.
image
// 发送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(inputTextViewDidChange) name:UITextViewTextDidChangeNotification object: self.inputTextView];
实现通知的方法
- (void)inputTextViewDidChange
{
NSString* toBeString = self.inputTextView.text;
NSIntegertextleng = 0;
//获取高亮部分
UITextRange*selectedRange = [self.inputTextViewmarkedTextRange];
UITextPosition*position = [self.inputTextViewpositionFromPosition:selectedRange.startoffset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if(!position)
{
if(toBeString.length> totalNum&& self.inputTextView.markedTextRange== nil)
{
//用字符串的字符编码指定索引查找位置
NSRangerangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:totalNum];
if(rangeIndex.length== 1)
{
self.inputTextView.text= [toBeString substringToIndex:totalNum];
}
else
{
self.inputTextView.text= [toBeString substringWithRange:NSMakeRange(0, textleng)];
}
} else{
textleng = toBeString.length;
}
}
}
image
协议方法:
- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text{
_numberLabel.text= [NSStringstringWithFormat:@"%lu/%d",(unsignedlong)textView.text.length,totalNum];
if(textView == self.inputTextView) {
//************** UITextView超过设定个数时在代理协议方法中设置不可输入时,需要添加删除操作,否则会造成当达到字数限制后删除键也不能使用的后果.
//******* 这里的if时候为了获取删除操作,如果没有次if会造成当达到字数限制后删除键也不能使用的后果.
if(range.length== 1&& text.length== 0) {
returnYES;
}
elseif(textView.text.length> totalNum) {
textView.text= [textView.textsubstringToIndex:totalNum];
returnNO;
}
}
returnYES;
}
![image](https://img.haomeiwen.com/i3075498/ee574fb7c0b73a9a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论