2012-11-21 5 views
94

Einige Apps zeigen ein Standard-Aktionsblatt in iOS 6 mit Freigabeoptionen.Wie wird das standardmäßige iOS 6-Aktionsblatt mit verfügbaren Freigabeoptionen angezeigt?

Social Framework hat nur zwei Klassen, eine für das Komponieren und eine für die Anfrage.

Was ich gefunden habe, ist über das Komponieren für einen bestimmten Dienst mit SLComposeViewController und vor dem Anzeigen muss ich manuell abfragen, wenn der Dienst verfügbar ist. Und dann muss ich auch ein eigenes Action-Sheet mit eigenen Icons erstellen.

Wie zeigen diese Apps dieses standardmäßige Aktionsblatt für Aktionsoptionen in iOS 6? Oder verwenden sie ein Open-Source-Framework?

+0

ich möchte share sheet mit benutzerdefinierten icon wie wechat, weibo, qq öffnen und integrieren die funktionalität davon, wie kann ich das tun? – RaviJSS

+0

Überprüfen Sie einfach diesen Link auch .. http://Stackoverflow.com/a/35267035/3908884 –

+0

[Hier ist ein einfaches Beispiel mit Swift] (http://StackOverflow.com/A/35931947) – Suragch

Antwort

222

Die 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ätsansicht-Controller modal darstellen, und iOS zeigt automatisch alle anwendbaren Freigabedienste an. Beispiele:

Objective-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.flatMap({$0}), applicationActivities: nil) 
    if UIDevice.current.userInterfaceIdiom == .pad { 
     activityViewController.popoverPresentationController?.sourceView = view 
    } 
    present(activityViewController, animated: true, completion: nil) 
} 
+6

Nice Edit für die Swift Ausführung. Ich würde das .append (Element) für ein + = Element ändern. Sieht mehr swift-y –

+2

In der neuesten Version von Swift ersetzen 'AnyObject []()' mit '[AnyObject]()' –

+5

Seine Funktion, nur nach dem Einloggen in entsprechende Konten in den Einstellungen (facebook/twitter), Aber In der Fotos App/Notes App sind die Optionen verfügbar, auch wenn der Benutzer nicht angemeldet ist, Könnten Sie bitte erklären, warum es so ist? Oder gibt es eine andere Problemumgehung? –

39

Fügen Sie diese den UIActivityViewController zu verwenden.

-(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

Bevorzugte Antwort auf mich, da Sie auch ausschließlich zeigen. –