Jak wyświetlić domyślny arkusz akcji udostępniania iOS 6 z dostępnymi opcjami udostępniania?


97

Niektóre aplikacje wyświetlają domyślny arkusz akcji w iOS 6 z opcjami udostępniania.

Struktura społeczna ma tylko dwie klasy, jedną do tworzenia i jedną na żądanie.

To, co znalazłem, dotyczy tworzenia dla określonej usługi za pomocą SLComposeViewController i przed pokazaniem tego muszę ręcznie zapytać, czy usługa jest dostępna. A potem muszę też stworzyć własny arkusz akcji z własnymi ikonami.

W jaki sposób te aplikacje pokazują ten domyślny arkusz akcji opcji udostępniania w iOS 6? A może używają frameworka open source?


chcę otworzyć arkusz udostępniania z niestandardową ikoną, taką jak wechat, weibo, qq i zintegrować jego funkcjonalność, jak mogę to zrobić?
Ravi Ojha

Po prostu sprawdź również ten link. Stackoverflow.com/a/35267035/3908884
Poznaj Doshi,

Odpowiedzi:


223

UIActivityViewController stwierdzono w drugiej odpowiedzi sprawia, że to trywialne. Wszystko, co musisz zrobić, to określić tekst / obraz / adres URL, który chcesz udostępnić, i zaprezentować modalnie kontroler widoku aktywności, a system iOS automatycznie wyświetli wszystkie odpowiednie usługi udostępniania. Przykłady:

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

Szybki

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
Niezła edycja dla wersji Swift. Zmieniłbym .append (element) na + = element. Wygląda na szybsze
Ignacio Inglese

2
W najnowszej wersji Swift, wymienić AnyObject[]()z[AnyObject]()
Ruben Martinez Jr

5
Działa tylko po zalogowaniu się na odpowiednie konta w ustawieniach (facebook / twitter), ale w aplikacji Zdjęcia / Notatki opcje są dostępne nawet jeśli użytkownik nie jest zalogowany, Czy mógłbyś wyjaśnić, dlaczego tak jest? Czy jest jakieś inne obejście?
Jaldip Katre,

4
Dodałem edycję dla obsługi iOS 8 na iPadzie - musisz także skonfigurować to UIActivityViewController, UIPopoverControllerinaczej się zawiesi present…. Do tej pory miałem dwa odrzucenia z trzech dotyczących edycji, więc zakładając, że została odrzucona, być może mógłbyś sprawdzić, czy chcesz samodzielnie dodać zmianę. Albo nie :-)
Benjohn

Och, edycja cytuje tę odpowiedź, która wyjaśnia wszystko.
Benjohn

39

Dodaj to, aby użyć 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
Preferowana odpowiedź do mnie, ponieważ pokazujesz również wykluczanie.
José
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.