Come visualizzare il foglio delle azioni di condivisione predefinito di iOS 6 con le opzioni di condivisione disponibili?


97

Alcune app mostrano un foglio delle azioni predefinito in iOS 6 con opzioni di condivisione.

Social Framework ha solo due classi, una per la composizione e una per la richiesta.

Quello che ho trovato però riguarda la composizione per un particolare servizio con SLComposeViewController e prima di mostrarlo devo interrogare a mano se il servizio è disponibile. E poi devo anche creare il mio foglio delle azioni con le proprie icone.

In che modo queste app mostrano questo foglio di azione delle opzioni di condivisione predefinito in iOS 6? O stanno usando un framework open source?


voglio aprire il foglio di condivisione con un'icona personalizzata come wechat, weibo, qq e integrarne le funzionalità, come posso farlo?
Ravi Ojha

Basta controllare anche questo link .. stackoverflow.com/a/35267035/3908884
Incontra Doshi

Risposte:


223

L' UIActivityViewController dichiarato nell'altra risposta lo rende banale. Tutto quello che devi fare è specificare il testo / immagine / URL che desideri condividere e presentare il controller di visualizzazione attività in modo modale e iOS visualizzerà automaticamente tutti i servizi di condivisione applicabili. Esempi:

Obiettivo-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];
}

Swift

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)
}

6
Bella modifica per la versione Swift. Modificherei il .append (item) per un + = item. Sembra più veloce
Ignacio Inglese

2
Nell'ultima versione di Swift, sostituisci AnyObject[]()con[AnyObject]()
Ruben Martinez Jr.

5
Funziona, solo dopo aver effettuato l'accesso ai rispettivi account nelle impostazioni (facebook / twitter), ma nell'app foto / app note, le opzioni sono disponibili anche se l'utente non è connesso, potresti spiegare, perché è così? O c'è qualche altra soluzione alternativa?
Jaldip Katre

4
Ho aggiunto una modifica per il supporto di iOS 8 su iPad: devi anche configurare le UIActivityViewControllers UIPopoverControllero si bloccherà present…. Finora ho ricevuto due rifiuti da tre sulla modifica, quindi supponendo che sia rifiutata, forse potresti vedere se vuoi aggiungere la modifica da solo. Oppure no :-)
Benjohn

Oh, la modifica cita questa risposta che spiega tutto.
Benjohn

39

Aggiungi questo per utilizzare il file 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];
}

2
Risposta preferita a me poiché mostri anche l'esclusione.
José
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.