Permettre de copier et coller UITextField, sans le rendre modifiable
Je veux que le texte dans une UITextField
(ou, idéalement, une UILabel
) à non-modifiable, mais en même temps, de donner à l'utilisateur la possibilité de le copier pour le coller ailleurs.
Vous devez vous connecter pour publier un commentaire.
Ma dernière solution était la suivante:
J'ai créé une sous-classe de UILabel (UITextField devrait fonctionner de la même) qui affiche une UIMenuController après avoir été exploité. CopyableLabel.m ressemble à ceci:
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self.yourCopyableLabel action:@selector(tapDetected)]; [self.view addGestureRecognizer:tgr];
puis changer le- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
dans le copyableLabel mise en œuvre de- (void) tapDetected
et cela devrait fonctionnerUITapGestureRecogniser
à une cellule en particulier si vous le pouvez, la façon dont je l'ai mentionné ci-dessus rend le menu déroulant si vous cliquez n'importe où sur l'écran qui n'est pas un élément cliquableCette question est assez vieux et je suis surpris que personne n'a posté une solution sans sous-classement. L'idée présentée dans @mrueg réponse est bonne, mais vous ne devriez pas sous-classe quoi que ce soit. Je viens de tomber sur ce problème et résolu comme ceci:
De mon point de vue contrôleur:
Si vous voulez faire ce travail pour un
UILabel
, il devrait fonctionner de la même façon avec simplement l'ajout d'un robinet geste de reconnaissance au lieu d'utiliser la méthode du délégué.Essayer
UITextView
à la place (je pense qu'elle pourrait fonctionner comme uneUILabel
pour vous). J'ai testé cela avec soneditable
propriété définie àNO
, et double-tapping-de-la copie a fonctionné pour moi.Une autre solution est de garder le
UITextField
activée, mais par programmation à l'empêcher d'être édité. Cela se fait avec le délégué suivant la méthode:Je ne suis pas au courant des limitations possibles si, actuellement adapté à mes besoins.
Cela va faire tout ce dont vous avez besoin. Sera copiable. Mais pas modifiables, et de ne pas s'afficher un clavier ou un curseur.
Le code suivant m'a sauvé.
Il semble
Paste
est un unique et complète modifier l'événement.