iOS UITextField 光标控制

本文待完善.......

在平时开发中会处理一些复制数字到文本框中,需要控制光标的位置,代码如下,需要用到的童鞋可以看下,亲测可用

//更新光标位置
- (void)updateLocationAfterCopyWithTextField:(UITextField *)textField offset:(NSInteger)offset {
    
    NSRange currentRange = [self selectedRangeWithTextField:textField];
    if (currentRange.location < offset) {
        offset = currentRange.location;
    }
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //必须加延迟,否则无法更新光标位置
        [self setSelectedRange:NSMakeRange(offset, 0) textField:textField];
    });
}

#pragma mark - Zachary - 获取&设置光标位置
- (NSRange)selectedRangeWithTextField:(UITextField *)textField {
    
    NSInteger location = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start];
    
    NSInteger length = [textField offsetFromPosition:textField.selectedTextRange.start toPosition:textField.selectedTextRange.end];
    
    return NSMakeRange(location, length);
}

- (void)setSelectedRange:(NSRange)selectedRange textField:(UITextField *)textField {
    //beginningOfDocument 内容启始位置
    UITextPosition *startPosition = [textField positionFromPosition:textField.beginningOfDocument offset:selectedRange.location];
    //selectedRange.length 选中的
    UITextPosition *endPosition = [textField positionFromPosition:textField.beginningOfDocument offset:selectedRange.location + selectedRange.length];
    
    UITextRange *selectedTextRange = [textField textRangeFromPosition:startPosition toPosition:endPosition];
    [textField setSelectedTextRange:selectedTextRange];
}

使用的时候,直接调用

if (textField.tag == 1002 && string.length > 5) { //邮编  
    string =  [string substringToIndex:6];
    [self updateLocationAfterCopyWithTextField:textField offset:6];
 }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章