2 votes

Copier du texte avec mise en forme - iOS 6 NSAttributedString to Pasteboard

Comment puis-je copier de manière programmatique du texte formaté (par ex. italique ) à partir d'une UITextView, de sorte que lorsqu'elle est collée dans un autre programme (par exemple Mail), le formatage est conservé ? Je suppose que l'approche correcte consiste à copier une NSAttributedString dans le presse-papiers. Actuellement, je suis en mesure de copier une chaîne de caractères ordinaire dans le presse-papiers en procédant comme suit :

NSString *noteTitleAndBody = [NSString stringWithFormat:@"%@\n%@", [document title], [document body]];
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = noteTitleAndBody;

J'ai remarqué que si je sélectionne et copie le texte de mon UITextView avec l'élément de menu standard Copier de la sélection de texte, cela fonctionne comme souhaité. Mais j'ai besoin d'y accéder via un bouton que j'ai créé.

J'ai pensé que peut-être je pourrais juste appeler le UIResponderStandardEditActions Méthode de copie. En utilisant la méthode suivante, le collage dans Mail a conservé le formatage, mais mon application s'est également plantée.

NSMutableAttributedString *noteTitleAndBody = [[NSMutableAttributedString alloc] initWithString:[document title]];
[noteTitleAndBody appendAttributedString:[document body]];
[noteTitleAndBody copy:nil];

Des exemples de la manière correcte de procéder seraient très appréciés.

PS - Je suis conscient qu'il existe des fils de discussion relatifs à la NSAttributedString et au tableau d'affichage, mais il semble qu'ils soient soit pour le cacao , ne pas faire référence à la méthode de copie UIResponderStandardEditActions ou sont antérieurs à iOS 6, où de nombreux attributs de UITextView sont devenus disponibles.

1voto

DenVog Points 1588

Ce qui suit fonctionnera pour le textView qui est actuellement le premier intervenant :

[UIApplication sharedApplication] sendAction:@selector(copy:) to:nil from:self forEvent:nil];

Comme mon bouton de copie n'est accessible que lorsque mon textView a résigné firstResponder, j'ai dû faire un peu plus :

[self.noteTextView select:self];
self.noteTextView.selectedRange = NSMakeRange(0, [self.noteTextView.text length]);
[[UIApplication sharedApplication] sendAction:@selector(copy:) to:nil from:self forEvent:nil];
[self.noteTextView resignFirstResponder];

Merci aux posts suivants qui m'ont mis sur la bonne voie :

Effectuer un copier/couper à partir de UIResponderStandardEditActions

Puis-je appeler une méthode de sélection à partir de UIResponderStandardEditActions ?

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