selectedTextRange学习

2021-09-16  本文已影响0人  冷武橘

一、 UITextPosition

@property (nonatomic, readonly) UITextPosition *beginningOfDocument;
@property (nonatomic, readonly) UITextPosition *endOfDocument;

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];
    });
}

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

[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);
上一篇下一篇

猜你喜欢

热点阅读