Wie wird das Standard-Aktionsblatt für die iOS 6-Freigabe mit verfügbaren Freigabeoptionen angezeigt?

97

Einige Apps zeigen in iOS 6 ein Standardaktionsblatt mit Freigabeoptionen.

Social Framework hat nur zwei Klassen, eine zum Komponieren und eine für Anfragen.

Was ich jedoch gefunden habe, ist das Komponieren für einen bestimmten Dienst mit SLComposeViewController. Bevor ich dies zeige, muss ich manuell abfragen, ob der Dienst verfügbar ist. Und dann muss ich auch mein eigenes Aktionsblatt mit eigenen Symbolen erstellen.

Wie zeigen diese Apps dieses Standardaktionsblatt für Freigabeoptionen in iOS 6 an? Oder verwenden sie ein Open Source Framework?

offener Frosch
quelle
Ich möchte das Freigabeblatt mit einem benutzerdefinierten Symbol wie wechat, weibo, qq öffnen und dessen Funktionalität integrieren. Wie kann ich das tun?
Ravi Ojha
Überprüfen Sie einfach diesen Link auch .. stackoverflow.com/a/35267035/3908884
Treffen Sie Doshi

Antworten:

223

Der in der anderen Antwort angegebene UIActivityViewController macht dies trivial. Sie müssen lediglich den Text / das Bild / die URL angeben, die Sie freigeben möchten, und den Aktivitätsansichts-Controller modal präsentieren. IOS zeigt automatisch alle zutreffenden Freigabedienste an. Beispiele:

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

Schnell

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
quelle
6
Schöne Bearbeitung für die Swift-Version. Ich würde das .append (Element) für ein + = Element ändern. Sieht schneller aus
Ignacio Inglese
2
In der neuesten Version von Swift ersetzen Sie AnyObject[]()durch[AnyObject]()
Ruben Martinez Jr.
5
Es funktioniert nur, nachdem Sie sich in den Einstellungen (Facebook / Twitter) bei den jeweiligen Konten angemeldet haben. In der Foto-App / Notes-App sind die Optionen jedoch auch dann verfügbar, wenn der Benutzer nicht angemeldet ist. Können Sie bitte erklären, warum dies so ist? Oder gibt es eine andere Problemumgehung?
Jaldip Katre
4
Ich habe eine Bearbeitung für iOS 8-Unterstützung auf dem iPad hinzugefügt - Sie müssen auch die konfigurieren UIActivityViewController, UIPopoverControllersonst stürzt sie ab present…. Ich hatte bisher zwei Ablehnungen von drei bei der Bearbeitung. Unter der Annahme, dass sie abgelehnt wurde, könnten Sie vielleicht sehen, ob Sie die Bearbeitung selbst hinzufügen möchten. Oder nicht :-)
Benjohn
Oh, die Bearbeitung zitiert diese Antwort, die alles erklärt.
Benjohn
39

Fügen Sie dies hinzu, um die zu verwenden 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
quelle
2
Bevorzugte Antwort an mich, da Sie auch ausschließen zeigen.
José