问题 如何从UITextView或UITextField获取选定范围的文本


我试图从UITextView(和或UITextField)获取所选文本范围,以便我可以编辑选定的文本,或修改属性字符串。我做出选择时触发了下面的方法,但方法中的代码返回空值。

- (void)textViewDidChangeSelection:(UITextView *)textView {

    UITextRange *selectedRange = [textField selectedTextRange];

    NSLog(@"Start: %@ <> End: %@", selectedRange.start, selectedRange.end);

}

9164
2018-03-26 05:59


起源



答案:


你可以试试这个,

- (void)textViewDidChangeSelection:(UITextView *)textView {

   UITextRange *selectedRange = [textView selectedTextRange];
   NSString *selectedText = [textView textInRange:selectedRange];
}

13
2017-08-12 07:14





迅速

首先获取所选文本范围,然后使用该范围获取实际文本:

if let textRange = myTextView.selectedTextRange {

    let selectedText = myTextView.text(in: textRange)

    // ...
}

笔记:

  • 从a中选择文字 UITextField 是以同样的方式完成的。
  • 范围是 UITextRange不是 NSRange。这允许正确选择诸如表情符号和扩展的字形簇之类的东西。看到 这个答案 有关这方面的相关细节。

2
2018-06-08 02:37





Swift 4.1

在你的 UITextView 扩展将以下代码放在函数中,并在控制器中使用它: 您可以使用view-Controller中的SelectionDidChange委托方法中的textView实例调用此方法。最好用条件textView.selectedRange.length> 0包装这个函数调用,以得到一些文本...

  let begin = self.beginningOfDocument
  let start = self.position(from: begin, offset: selectedRange.location)
  let end = self.position(from: position(from: start!, offset: 0)!, offset: selectedRange.length)
  let txtRange = self.textRange(from: start!, to: end!)

  let txt = self.text(in: txtRange!)
  print("Sel Text is \(String(describing: txt))")

我们不能使用可选绑定来存储所选范围,而是可以为nsrange类型声明一个可选项,然后使用if-let ...。

TextInputcomponent 有一个属性来获取所选的文本范围。

let range = textView.selectedRange

然后你可以使用 range.locationrange.length 用于更改容器中文本属性的值等...


0
2017-07-23 08:51