43 votes

Comment faire un copier/coller programmé dans l'iPhone ?

J'ai une vue de texte avec du texte et un bouton de copie dans cette vue,

Lorsque l'utilisateur saisit un texte et appuie sur le bouton "Copier", il doit copier ce texte et le coller où il le souhaite.

Je sais qu'il existe un contrôleur de menu copier/coller par défaut dans iOS, mais je veux réaliser cette fonctionnalité en cliquant sur un bouton. Je pense qu'il existe UIPasteboard pour faire cette fonctionnalité, mais je ne sais pas comment l'utiliser.

115voto

iscavengers Points 2635

Pour copier à partir d'un bouton, cliquez :

- (IBAction)copy {
    UIPasteboard *pb = [UIPasteboard generalPasteboard];
    [pb setString:[textView text]];
}

Pour coller à partir d'un bouton, cliquez :

- (IBAction)paste {
    UIPasteboard *pb = [UIPasteboard generalPasteboard];
    textView.text = [pb string];
}

0 votes

Seule une partie du texte est sélectionnée dans la vue texte. Comment copier et coller uniquement la partie sélectionnée au lieu de copier l'ensemble du texte ?

0 votes

Cela fonctionne si vous souhaitez toujours remplacer le contenu existant de la fenêtre de texte. Si vous voulez coller à la position du curseur, ce n'est pas suffisant.

21voto

Suragch Points 197

Swift

Il s'agit de la version Swift de la réponse acceptée.

Copie

UIPasteboard.general.string = myTextView.text

Pâte

if let myString = UIPasteboard.general.string {
    myTextView.insertText(myString)
}

7voto

benhorgen Points 240

Pour les développeurs utilisant MonoTouch, voici les deux lignes que j'ai utilisées pour accomplir la tâche en C#.

La réponse fournie par iscavenger à cette question a servi de modèle pour ma réponse (après l'avoir implémentée avec succès dans mon projet ;-)

UIPasteboard clipboard = UIPasteboard.General;
clipboard.String =  "string being added to clipboard";

1 votes

Il n'y a aucun sens à déclarer explicitement le presse-papiers des variables. Ce serait deux fois plus court si vous inlinez UIPasteboard.General :)

0 votes

Était explicite pour l'amour de l'exemple... mais moi aussi j'aime les one-liners ;-)

6voto

Ben Packard Points 3441

Je ne vois pas pourquoi on ne peut pas simplement l'utiliser :

[theTextView paste:nil];

selon Documentation sur l'UIResponder

4voto

Michael Dautermann Points 47757

Je soupçonne que vous pouvez assez facilement faire ce que vous voulez, en commençant par les [UIPasteboard dataForPasteboardType:] méthode .

Il y a un exemple de code Apple que vous pouvez consulter :

http://developer.apple.com/library/ios/#samplecode/CopyPasteTile/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009040

0 votes

Ajoutez à votre question initiale un code montrant comment vous déclenchez l'action d'un bouton, puis récupérez les données du tableau de bord à l'aide de la fonction [UIPasteboard dataForPasteboardType:] méthode. Si cela ne fonctionne toujours pas pour vous, je peux essayer de modifier ma réponse pour vous montrer comment cela fonctionne.

0 votes

J'ai mis ceci dans mon code mais après avoir appuyé sur le bouton de copie, l'application se plante, -(IBAction)_clickbtncopynotes :(id)sender {[UIPasteboard dataForPasteboardType:textView.text] ; }.

0 votes

Ce n'est pas la façon d'appeler le code (c'est juste une façon standard de décrire la méthode probable que vous utiliseriez). Vous devriez probablement faire quelque chose comme textView.text = [[UIPasteboard generalPasteboard] dataForPasteboardType: @"public.utf8-plain-text "] . Regardez bien l'exemple d'Apple que je vous ai indiqué et voyez comment ils récupèrent les données du tableau de bord.

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