美文网首页
selectedTextRange学习

selectedTextRange学习

作者: 冷武橘 | 来源:发表于2021-09-16 17:54 被阅读0次

    一、 UITextPosition

    @property (nonatomic, readonly) UITextPosition *beginningOfDocument;
    @property (nonatomic, readonly) UITextPosition *endOfDocument;
    
    • beginningOfDocument:文档的起点( <_UITextKitTextPosition: 0x600002018e80> (0F)) ,0的位置
    • endOfDocument:文档的结束点。text.location + 1的位置

    UITextPosition 的作用就是用来描述text视图文本的索引位置。文字为0长度,endOfDocument就是0,文字长度是1,endOfDocument就是1

    二、UITextRange

    用来描述postion1到postion2内的文本范围

       UITextPosition *postion1 = [textFiled positionFromPosition:textFiled.beginningOfDocument offset:1];
        UITextPosition *postion2 = [textFiled positionFromPosition:textFiled.beginningOfDocument offset:3];
        UITextRange *textRange = [textFiled textRangeFromPosition:postion1 toPosition:postion2];
    

    例如下面这个例子通过textRange去替换文字

     UITextField *textFiled = [[UITextField alloc]init];
        [self.view addSubview:textFiled];
        textFiled.text = @“123456”;
        [textFiled addTarget:self action:@selector(test1:) forControlEvents:UIControlEventEditingChanged];
        textFiled.backgroundColor = [UIColor redColor];
        textFiled.frame = CGRectMake(100, 100, 200, 40);
       
        UITextPosition *postion1 = [textFiled positionFromPosition:textFiled.beginningOfDocument offset:1];
        UITextPosition *postion2 = [textFiled positionFromPosition:textFiled.beginningOfDocument offset:3];
        UITextRange *textRange = [textFiled textRangeFromPosition:postion1 toPosition:postion2];
        [textFiled replaceRange:textRange withText:@"a”];
    
    截屏2021-09-16 下午4.09.12.png
    截屏2021-09-16 下午4.11.34.png

    1、selectedTextRange

    选中文本的文本范围

    截屏2021-09-16 下午4.33.11.png
    
    - (void)viewDidLoad{
        [super viewDidLoad];
        UITextField *textFiled = [[UITextField alloc]init];
        [self.view addSubview:textFiled];
        textFiled.text = @"123456";
        textFiled.delegate = self;
        [textFiled addTarget:self action:@selector(test1:) forControlEvents:UIControlEventEditingChanged];
        textFiled.backgroundColor = [UIColor redColor];
        textFiled.frame = CGRectMake(100, 100, 200, 40);
        
        dispatch_async(dispatch_get_main_queue(), ^{
            [textFiled becomeFirstResponder];
            textFiled.selectedTextRange = [textFiled textRangeFromPosition:textFiled.beginningOfDocument toPosition:textFiled.endOfDocument];
        });
    }
    
    • selectedTextRange可以设置文本的选中
    • 文本在编辑时,selectedTextRange也就是光标的位置。

    因此想在光标位置插入文字,就可以这样

    [textFiled replaceRange:textFiled.selectedTextRange withText:@"a"];
    

    如果你想改变光标的位置

      [textFiled becomeFirstResponder];
        UITextPosition *startPosion = [textFiled positionFromPosition:textFiled.beginningOfDocument offset:4];
        UITextPosition *endPosion = [textFiled positionFromPosition:startPosion offset:0];
        
        UITextRange *textRange = [textFiled textRangeFromPosition:startPosion  toPosition:endPosion];
        
        textFiled.selectedTextRange = textRange;
    

    三、selectedRange

    和selectedTextRange的作用相同,只是selectedRange 是普通的NSRange 。而selectedRange只属于UITextView的是属性,UItextFiled没有这个属性

    textView设置选中的文本就有两种方式:

     dispatch_async(dispatch_get_main_queue(), ^{
            [self->textView becomeFirstResponder];
            self->textView.selectedRange = NSMakeRange(0, textView.text.length);
            });
    
       dispatch_async(dispatch_get_main_queue(), ^{
            [self->textView becomeFirstResponder];
            self->textView.selectedTextRange = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.endOfDocument];
            });
      
    

    在光标位置插入文字

     [textView replaceRange:textView.selectedRange withText:@"a"];
    

    重新设置光标位置

     [textView becomeFirstResponder];
        textView.selectedRange  =NSMakeRange(1, 0);
    

    相关文章

      网友评论

          本文标题:selectedTextRange学习

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