UITextView在光标处插入字符串

原创 2015年11月20日 16:28:22

UITextView在光标处插入字符串


下面是某次需求中要求在光标处插入所导入的字符串,并且以分开。
这里添加了比较多的逻辑处理,过滤一些字符。另外,在6.0系统上获取selectedRange.location会出现NSNotFound等,因此还处理添加特殊处理。下面的代码是兼容到iOS 6.0的。

#pragma mark -- 更新插入数据到光标处
- (void)updateTextViewTextInsertedString:(NSString *)text {
  if (kIsEmptyString(text)) {
    return;
  }

  // 获得光标所在的位置
  NSUInteger location = self.diseaseDescTextView.selectedRange.location;
  if (location == NSNotFound || location >= self.diseaseNameTextField.text.length) {
    if (kIsEmptyString(self.diseaseNameTextField.text)) {
      text = [text substringFromIndex:1];
    }

    NSString *currentText = self.diseaseDescTextView.text;
    if (kIsEmptyString(currentText)) {
      currentText = @"";
    }
    self.diseaseDescTextView.text = [NSString stringWithFormat:@"%@%@",
                                     currentText,
                                     text];
  [self textViewDidChange:self.diseaseDescTextView];
    return;
  }

  // 如果光标之前没有内容,去掉前面的逗号
  if (kIsEmptyString([self.diseaseDescTextView.text substringToIndex:location])) {
    if ([text hasPrefix:@","]) {
      if (text.length == 1) {
        text = @"";
      } else {
        text = [text substringFromIndex:1];
      }
    }
  }

  if (kIsEmptyString(self.diseaseDescTextView.text)) {
    self.diseaseDescTextView.text = text;
    [self textViewDidChange:self.diseaseDescTextView];
    return;
  }

  if (!kIsEmptyString([self.diseaseDescTextView.text substringFromIndex:location])) {
    text = [NSString stringWithFormat:@"%@,", text];
  }

  NSString *preText = [self.diseaseDescTextView.text substringToIndex:location];
  if (kIsEmptyString(preText)) {
    preText = @"";
  }

  NSString *lastText = [self.diseaseDescTextView.text substringFromIndex:location];
  if (kIsEmptyString(lastText)) {
    lastText = @"";
  }

  NSString *result = [NSString stringWithFormat:@"%@%@%@",
                      preText,
                      text,
                      lastText];

  self.diseaseDescTextView.text = result;
  [self textViewDidChange:self.diseaseDescTextView];

  // 调整光标
  self.diseaseDescTextView.selectedRange = NSMakeRange(location + text.length + 1, 1);
}

看不懂的可以在评论中回复,笔者会收到邮件通知。

阅读原文

关注我


微信公众号:iOSDevShares
有问必答QQ群:324400294

版权声明:本CSDN博客所有文章不会即时更新,请关注个人博客:http://tech.yunyingxbs.com/

如何实现UITextView在光标之后插入(Insert)字符和覆盖(Replace)光标之后的一个字符的模式转换

1、UITextView创建初始化,设置相关属性,添加需要的方法 2、设置插入Insert和覆盖Replace的转换按钮 相关代码: -(void)btnDown:(UIButton ...

iOS获得UITextView当前光标所在的位置.

iOS获得UITextView当前光标所在的位置.很简单: 定义两个变量 {     UITextView * _inputTV;     NSRange _range; ...

设置UITextField和UITextView的光标颜色

[textField setTintColor:[UIColor blueColor]]; [textView setTintColor:[UIColor blueColor]];

IOS 中设置UITextView 显示文本的光标

建立一个UITextView 默认是启动键盘 光标位于首位置,  _textView.selectedRange=NSMakeRange(0,0) ;   //起始位置 _textView...

iOS监听UITextView、UITextField键盘删除键

最近做了一个使用键盘删除键删东西的功能,UITextView监听删除键: #pragma mark - UITextViewDelegate - (BOOL)textView:(UIT...

UITextView获取光标位置

UITextRange *range = textView.selectedTextRange;     //光标位置     CGRect  rect = [textView caretRe...

在UITextField的光标处插入文本(iOS3.0)

原文: http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html iOS SDK的文本输入控件(UITex...
  • kmyhy
  • kmyhy
  • 2012年03月13日 22:01
  • 8226

在swift中保存图片到相册

本来是没有必要把这么小的一个知识点写到博客中的,但是,由于OC中的一些语法在swift中实现的时候有些特别,所以单独写下来到博客中,希望能够帮助到有需要的同学。 1.OC中的写法在OC中,我们需要保存...

iOS开发-属性字符串NSAttributeString与NSString相互转换

分享几个常用的 属性字符串NSAtrributeString 和 NSString 普通字符串的 转换方法: 一:把普通的字符串,替换为包含图片的属性字符串 plist 文件,图片 格式见下图: ...

UITextView自定义文字属性后光标老是自动跳到末尾的问题

UITextView自定义文字属性后,光标老是自动跳到末尾的问题
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UITextView在光标处插入字符串
举报原因:
原因补充:

(最多只允许输入30个字)