selectedTextRange学习
2021-09-16 本文已影响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);