UITextField中的UITextPosition

有没有什么办法让我通过文本字段的UITextRange对象获得UITextField的当前插入位置? 是否UITextField返回UITextRange甚至是任何用途? UITextPosition的公共接口没有任何可见的成员。

昨晚我也遇到了同样的问题。 事实certificate,你必须使用UITextField上的offsetFromPosition来获得所选范围的“开始”的相对位置来计算出位置。

例如

// Get the selected text range UITextRange *selectedRange = [self selectedTextRange]; //Calculate the existing position, relative to the beginning of the field int pos = [self offsetFromPosition:self.beginningOfDocument toPosition:selectedRange.start]; 

我结束了使用endOfDocument,因为更改文本字段后更容易恢复用户的位置。 我在这里写了一篇博文:

http://neofight.wordpress.com/2012/04/01/finding-the-cursor-position-in-a-uitextfield/

我在uitextfield上使用了一个类,并实现了setSelectedRange和selectedRange(就像在uitextview类中实现的方法一样)。 在这里可以find一个B2Cloud的例子,代码如下:

 @interface UITextField (Selection) - (NSRange) selectedRange; - (void) setSelectedRange:(NSRange) range; @end @implementation UITextField (Selection) - (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