83 votes

Sélectionner par programmation tout le texte dans UITextField

Comment puis-je sélectionner par programme tout le texte dans UITextField?

Merci!

88voto

blackforestcowboy Points 511

Thats ce qui a fait le tour pour moi:

 [self.titleField setSelectedTextRange:[self.titleField textRangeFromPosition:self.titleField.beginningOfDocument toPosition:self.titleField.endOfDocument]];
 

Assez moche, mais ça marche, donc il n'y aura pas de menu partagé affiché!

Pour résoudre le problème "ne fonctionne que tous les deux temps", utilisez les éléments suivants:

     __weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
    __strong __typeof(weakSelf) strongSelf = weakSelf;
    UITextRange *range = [strongSelf textRangeFromPosition:strongSelf.beginningOfDocument toPosition:strongSelf.endOfDocument];
    [strongSelf setSelectedTextRange:range];
});
 

Merci à Eric Baker (récemment édité à partir du commentaire ici)

66voto

Rick Points 310

Il s'avère que l'appel de -selectAll: avec un expéditeur non nul affiche le menu. L'appeler avec nil entraîne la sélection du texte, mais pas l'affichage du menu.

J'ai essayé ceci après que mon rapport de bogue à ce sujet revienne d'Apple avec la suggestion de passer nil à la place de moi-même.

Inutile de vous frotter à UIMenuController ou à d'autres API de sélection.

54voto

Jennifer Points 159

Utilisez ce dont vous avez besoin

  [yourtextField becomeFirstResponder]; //puts cursor on text field

 [yourtextField selectAll:nil];        //highlights text

 [yourtextField selectAll:self];       //highlights text and shows menu(cut copy paste)
 

50voto

Justin Searls Points 3078

Je viens de tester pour vérifier Mirko du commentaire ci-dessus, mais mon test vérifie que selectAll: a, en fait, sélectionnez tout le texte lorsqu'il est envoyé à l'objet UITextField lui-même.

Notez que le texte sera immédiatement masqués par COUPER | COPIER | COLLER, mais à votre question, c'est exactement ce que s'affiche lorsqu'un utilisateur appuie sur "Sélectionner Tout" pour commencer.

La solution, je vais avec qui suit, notez que la deuxième ligne permet de masquer temporairement le COUPER/COPIER/COLLER dialogue, sans le désactiver pour explicite les sélections de l'utilisateur

[_myTextField selectAll:self];
[UIMenuController sharedMenuController].menuVisible = NO;

2voto

Dan J Points 7314

Malheureusement, je ne pense pas que vous puissiez faire cela.

Je ne suis pas sûr que cela vous aide, mais setClearsOnBeginEditing vous permet de spécifier que les UITextField doivent supprimer la valeur existante lorsque l'utilisateur commence à modifier (il s'agit de la valeur par défaut pour sécurisé UITextFields ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X