iOS TextField 获取光标的位置

来源:互联网 发布:纸箱厂专业软件 编辑:程序博客网 时间:2024/05/21 14:25

最近在做一个项目的时候,发现没有获取光标的方法。进过研究后,出来分享给大家:

1、新建一个工程,我使用的Xcode 7.2 也就是 iOS9.2,托转一个TextField;


2、新建一个类别,对TextFIeld进行一个扩展,也就是新建一个类别;


这是.h文件

#import <UIKit/UIKit.h>@interface UITextField (ExtentRange)- (NSRange)selectedRange;- (void)setSelectedRange:(NSRange)range;@end

然后.m文件:

#import "UITextField+ExtentRange.h"@implementation UITextField (ExtentRange)- (NSRange) selectedRange{    UITextPosition* beginning = self.beginningOfDocument;        UITextRange* selectedRange = self.selectedTextRange;    UITextPosition* selectionStart = selectedRange.start;    UITextPosition* selectionEnd = selectedRange.end;        const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart];    const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd];        return NSMakeRange(location, length);}- (void) setSelectedRange:(NSRange) range{    UITextPosition* beginning = self.beginningOfDocument;        UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location];    UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length];    UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition];        [self setSelectedTextRange:selectionRange];}@end

大家也看到了,就是基本上一个重写的Set 和 Get 方法,值得一提的是这里所定义的
selectedRange
变量,它在UITextView是有这个属性的,但是在UItextField中确实没有的。

那么我们现在来对这个方法进行测试:

#import "ViewController.h"#import "UITextField+ExtentRange.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UITextField *textField;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        UITextField *tmpTextField = [[UITextField alloc]initWithFrame:CGRectMake(30, 30, 100, 40)];        [self.view addSubview:tmpTextField];        tmpTextField.text = @"121";    [tmpTextField becomeFirstResponder];        NSRange range = [tmpTextField selectedRange];        NSLog(@"%lu and %lu", (unsigned long)range.location, (unsigned long)range.length);        self.textField.text = @"ddwa";    NSLog(@"localhost is %lu, length is %lu", (unsigned long)[self.textField selectedRange].location, (unsigned long)[self.textField selectedRange].length);        [self.textField setSelectedRange:NSMakeRange(0, 1)];        NSLog(@"localhost is %lu, length is %lu", (unsigned long)[self.textField selectedRange].location, (unsigned long)[self.textField selectedRange].length);        [self.textField addTarget:self action:@selector(didChangeWithTextField:) forControlEvents:UIControlEventEditingChanged];}- (void)didChangeWithTextField:(UITextField *)textField{        NSRange range = textField.selectedRange;        NSLog(@"%lu and %lu", (unsigned long)range.location, (unsigned long)range.length);        NSLog(@" ... ");    }

可以看到  我在UIVIewDidLoad中写的变量,所得到的坐标位置都是(0 , 0);

然后我对这个textField添加了一个当值改变的一个监听,每次输入数值的时候,会有看到打印出来数据的变化。


2 0