Comment afficher la feuille d'action de partage d'iOS 6 par défaut avec les options de partage disponibles?

97

Certaines applications affichent une feuille d'action par défaut dans iOS 6 avec des options de partage.

Social Framework n'a que deux classes, une pour la composition et une pour la demande.

Ce que j'ai trouvé cependant, c'est de composer pour un service particulier avec SLComposeViewController et avant de montrer cela, je dois demander à la main si le service est disponible. Et puis je dois aussi créer ma propre feuille d'action avec mes propres icônes.

Comment ces applications affichent-elles cette feuille d'action des options de partage par défaut dans iOS 6? Ou utilisent-ils un framework open source?

openfrog
la source
Je veux ouvrir la feuille de partage avec une icône personnalisée comme wechat, weibo, qq et en intégrer les fonctionnalités, comment puis-je faire cela?
Ravi Ojha
Il suffit de vérifier ce lien également .. stackoverflow.com/a/35267035/3908884
Rencontrez Doshi

Réponses:

223

Le UIActivityViewController indiqué dans l'autre réponse rend cela trivial. Tout ce que vous avez à faire est de spécifier le texte / image / URL que vous souhaitez partager et présenter le contrôleur de vue d'activité de manière modale et iOS affichera automatiquement tous les services de partage applicables. Exemples:

Objectif c

- (void)shareText:(NSString *)text andImage:(UIImage *)image andUrl:(URL *)url
{
    NSMutableArray *sharingItems = [NSMutableArray new];

    if (text) {
        [sharingItems addObject:text];
    }
    if (image) {
        [sharingItems addObject:image];
    }
    if (url) {
        [sharingItems addObject:url];
    }

    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

Rapide

func share(sharingText: String?, sharingImage: UIImage?, sharingURL: URL?) {
    let sharingItems:[AnyObject?] = [
                                        sharingText as AnyObject,
                                        sharingImage as AnyObject,
                                        sharingURL as AnyObject
                                    ] 
    let activityViewController = UIActivityViewController(activityItems: sharingItems.compactMap({$0}), applicationActivities: nil)
    if UIDevice.current.userInterfaceIdiom == .pad {
        activityViewController.popoverPresentationController?.sourceView = view
    }
    present(activityViewController, animated: true, completion: nil)
}
Mick MacCallum
la source
6
Belle modification pour la version Swift. Je changerais le .append (item) pour un + = item. Ça a l'air plus rapide
Ignacio Inglese
2
Dans la dernière version de Swift, remplacez AnyObject[]()par[AnyObject]()
Ruben Martinez Jr.
5
Son fonctionnement, seulement après la connexion aux comptes respectifs dans les paramètres (facebook / twitter), mais dans l'application photos / l'application Notes, les options sont disponibles même si l'utilisateur n'est pas connecté, pourriez-vous s'il vous plaît expliquer, pourquoi il en est ainsi? Ou il existe une autre solution de contournement?
Jaldip Katre
4
J'ai ajouté une modification pour la prise en charge d'iOS 8 sur iPad - vous devez également configurer le UIActivityViewController's UIPopoverControllerou il plantera present…. Jusqu'à présent, j'ai eu deux refus sur trois sur la modification, donc en supposant qu'elle soit rejetée, vous pourriez peut-être voir si vous souhaitez ajouter la modification vous-même. Ou pas :-)
Benjohn
Oh, la rédaction cite cette réponse qui explique tout.
Benjohn
39

Ajoutez ceci pour utiliser le UIActivityViewController.

-(IBAction)shareButtonPressed:(id)sender {

    NSLog(@"shareButton pressed");

    NSString *texttoshare = _txt; //this is your text string to share
    UIImage *imagetoshare = _img; //this is your image to share
    NSArray *activityItems = @[texttoshare, imagetoshare];    
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
    [self presentViewController:activityVC animated:TRUE completion:nil];
}
Davide
la source
2
Réponse préférée à moi puisque vous montrez également l'exclusion.
José