1 et 2 : Comment définir les destinataires pour UIActivityViewController dans iOS 6 ?
Bien que les deux méthodes fournies soient un peu des astuces, en particulier la première, c'est possible.
3 : il est possible de partager différents contenus sur différents services, mais le nombre d'éléments et leurs types doivent être les mêmes (mais ce n'est pas une limitation, vraiment, car vous pouvez retourner nil pour les éléments dont vous n'avez pas besoin sur un service particulier). Vous devez créer des éléments à partager après que le service ait été sélectionné en utilisant le protocole UIActivityItemSource
Code que j'utilise :
Afficher UIActivityViewController avec le contrôleur actuel comme fournisseur de tous les éléments (il devrait avoir dans le fichier .h) :
const int numberOfSharedItems = 5;
- (IBAction)shareAction:(id)sender
{
NSMutableArray *shareItems = [NSMutableArray new];
while ([shareItems count] < numberOfSharedItems)
[shareItems addObject: self];
UIActivityViewController *shareController =
[[UIActivityViewController alloc]
// les éléments réels sont préparés par les méthodes du protocole UIActivityItemSource ci-dessous
initWithActivityItems: shareItems
applicationActivities :nil];
shareController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll];
[self presentViewController: shareController animated: YES completion: nil];
}
Créer des espaces réservés pour les éléments qui seront partagés :
-(id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
static UIActivityViewController *shareController;
static int itemNo;
if (shareController == activityViewController && itemNo < numberOfSharedItems - 1)
itemNo++;
else {
itemNo = 0;
shareController = activityViewController;
}
switch (itemNo) {
case 0: return @""; // intro par email
case 1: return @""; // texte par email
case 2: return [NSURL new]; // lien
case 3: return [UIImage new]; // image
case 4: return @""; // texte supplémentaire (via sur Twitter, signature par email)
default: return nil;
}
}
Créer les éléments réels qui seront partagés, différemment pour différents services :
-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
// le nombre d'éléments à partager
static UIActivityViewController *shareController;
static int itemNo;
if (shareController == activityViewController && itemNo < numberOfSharedItems - 1)
itemNo++;
else {
itemNo = 0;
shareController = activityViewController;
}
NSString *shareText = [self shareText]; // ce que vous voulez
NSURL *shareURL = [self shareURL];
// Twitter
if ([activityType isEqualToString: UIActivityTypePostToTwitter])
switch (itemNo) {
case 0: return nil;
case 1: return shareText; // vous pouvez changer le texte pour Twitter, j'ajoute $ au symbole boursier à l'intérieur de shareText ici, par exemple. Les hashtags peuvent également être ajoutés
case 2: return shareURL;
case 3: return nil; // pas d'image
case 4: return @"via @VotreApp";
default: return nil;
}
// E-mail
else if ([activityType isEqualToString: UIActivityTypeMail])
switch (itemNo) {
case 0: return @"Salut !\r\n\r\nJ'ai utilisé YourApp\r\n";
case 1: return shareText;
case 2: return shareURL;
case 3: return nil; // pas d'image
case 4: return [@"\r\nDécouvrez-le.\r\n\r\nCordialement\r\n" stringByAppendingString: [self userName]];
default: return nil;
}
else // Facebook ou autre chose à l'avenir
switch (itemNo) {
case 0: return nil;
case 1: return shareText;
case 2: return shareURL;
case 3: return [self shareImage];
case 4: return nil;
default: return nil;
}
}