UITextPosition en UITextField

¿Hay alguna manera para que pueda get en la position actual de un object del UITextField a través del object UITextRange del campo de text? ¿El UITextRange devuelve UITextField incluso de cualquier uso? La interfaz pública para UITextPosition no tiene miembros visibles.

Yo estaba enfrentando el mismo problema anoche. Resulta que debe usar offsetFromPosition en UITextField para get la position relativa del "inicio" del range seleccionado para calcular la position.

p.ej

// 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]; 

Terminé usando endOfDocument, ya que fue más fácil restaurar la position del usuario después de cambiar el campo de text. Escribí una publicación en el blog aquí:

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

Utilicé una categoría en uitextfield e implementé setSelectedRange y selectedRange (al igual que los methods implementados en la class uitextview). Un ejemplo se encuentra en B2Cloud aquí , con su código a continuación:

 @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