2010-11-14 10 views

Répondre

8

Vous combattez le système sur celui-ci. UITextField n'a aucune propriété publique pour définir la position du curseur (qui correspond réellement au début de la sélection en cours). Si vous pouvez utiliser un UITextView à la place, les méthodes de délégué suivantes forcera le curseur au début du texte. Sachez simplement que les utilisateurs ne s'attendent pas à ce comportement et vous devriez vérifier vos motivations pour le faire.

- (void)textViewDidBeginEditing:(UITextView *)textView { 
    shouldMoveCursor = YES; 
} 

- (void)textViewDidChangeSelection:(UITextView *)textView { 
    if(shouldMoveCursor) 
    { 
     NSRange beginningRange = NSMakeRange(0, 0); 
     NSRange currentRange = [textView selectedRange]; 
     if(!NSEqualRanges(beginningRange, currentRange)) 
      [textView setSelectedRange:beginningRange]; 
     shouldMoveCursor = NO; 
    } 
} 

shouldMoveCursor est une variable BOOL vous conservez dans votre contrôleur.

+0

Hey warrenm, thaks ami. Ce code est juste un homme génial. Chapeau. – anshul

19

UITextField est conforme au protocole UITextInput, qui fournit des méthodes permettant de contrôler la plage sélectionnée. Cela fonctionne dans mes tests:

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    textField.selectedTextRange = [textField 
     textRangeFromPosition:textField.beginningOfDocument 
     toPosition:textField.beginningOfDocument]; 
} 
+0

Cette solution fonctionne très bien! Assurez-vous de vous conformer au protocole de délégué UITextField. :) –

1

fonctionne pour moi

// Get current selected range , this example assumes is an insertion point or empty selection 
UITextRange *selectedRange = [textField selectedTextRange]; 
// Calculate the new position, - for left and + for right 
UITextPosition *newPosition = [textField positionFromPosition:selectedRange.start offset:3]; 
// Construct a new range using the object that adopts the UITextInput, our textfield 
UITextRange *newRange = [textField textRangeFromPosition:newPosition toPosition:newPosition]; 
// Set new range 
[textField setSelectedTextRange:newRange];