本文待完善.......
在平时开发中会处理一些复制数字到文本框中,需要控制光标的位置,代码如下,需要用到的童鞋可以看下,亲测可用
//更新光标位置
- (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];
}
网友评论