Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从UITextView或UITextField获取选定的文本范围_Ios_Uitextfield_Uitextview_Nsattributedstring_Uitextrange - Fatal编程技术网

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

Ios 如何从UITextView或UITextField获取选定的文本范围,ios,uitextfield,uitextview,nsattributedstring,uitextrange,Ios,Uitextfield,Uitextview,Nsattributedstring,Uitextrange,我试图从UITextView(and或UITextField)获取所选文本范围,以便编辑所选文本或修改属性字符串。当我进行选择时,会触发下面的方法,但该方法中的代码返回空值 - (void)textViewDidChangeSelection:(UITextView *)textView { UITextRange *selectedRange = [textField selectedTextRange]; NSLog(@"Start: %@ <> End: %

我试图从UITextView(and或UITextField)获取所选文本范围,以便编辑所选文本或修改属性字符串。当我进行选择时,会触发下面的方法,但该方法中的代码返回空值

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

    UITextRange *selectedRange = [textField selectedTextRange];

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

}
-(无效)textViewDidChangeSelection:(UITextView*)textView{
UITextRange*selectedRange=[textField selectedextrange];
NSLog(@“开始:%@结束:%@”,selectedRange.Start,selectedRange.End);
}
您可以试试这个

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

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

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

if let textRange = myTextView.selectedTextRange {

    let selectedText = myTextView.text(in: textRange)

    // ...
}
注意事项:

  • UITextField
    中选择文本的方式相同
  • 范围是
    uitextange
    ,而不是
    NSRange
    。这允许正确选择诸如表情符号和扩展的字形集群之类的东西。有关此操作的相关详细信息,请参阅

    • Swift 4.1

      UITextView
      扩展中,将以下代码放入函数中,并在控制器中使用: 您可以在视图控制器的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.location
      range.length
      值来更改容器中文本的属性等。

      Swift 5.0

      下面是我如何从
      Panda.txt

      func textField didbeginediting(textField:UITextField){
      //如果textField.text为“Panda.txt”,则偏移量为3
      让偏移量=字符串(textField.text!.split(分隔符:“.”).last!)长度
      let from=textField.position(from:textField.beginingofdocument,偏移量:0)
      let to=textField.position(from:textField.beginingofdocument,
      偏移量:textField.text!.length-(偏移量+1))
      //现在将选择“熊猫”
      textField.selectedTextRange=textField.textRange(从:从!到:到!)
      //注意:不建议使用“!”展开,此处的文本100%不为空,因此是安全的
      }