Bagaimana cara menampilkan lembar tindakan berbagi iOS 6 default dengan opsi berbagi yang tersedia?

97

Beberapa aplikasi menampilkan lembar tindakan default di iOS 6 dengan opsi berbagi.

Kerangka Sosial hanya memiliki dua kelas, satu untuk membuat dan satu untuk permintaan.

Apa yang saya temukan adalah tentang menyusun untuk layanan tertentu dengan SLComposeViewController dan sebelum menunjukkan ini saya harus menanyakan secara manual jika layanan tersedia. Dan kemudian saya juga harus membuat lembar tindakan saya sendiri dengan ikon sendiri.

Bagaimana aplikasi tersebut menampilkan lembar tindakan opsi berbagi default ini di iOS 6? Atau apakah mereka menggunakan kerangka kerja sumber terbuka?

katak terbuka
sumber
saya ingin membuka lembar berbagi dengan ikon khusus seperti wechat, weibo, qq dan mengintegrasikan fungsionalitasnya, bagaimana saya bisa melakukan ini?
Ravi Ojha
Cukup periksa tautan ini juga .. stackoverflow.com/a/35267035/3908884
Temui Doshi

Jawaban:

223

The UIActivityViewController dinyatakan dalam jawaban lain membuat ini sepele. Yang harus Anda lakukan adalah menentukan teks / gambar / URL yang ingin Anda bagikan dan menampilkan pengontrol tampilan aktivitas secara sederhana dan iOS akan secara otomatis menampilkan semua layanan berbagi yang berlaku. Contoh:

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

Cepat

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
sumber
6
Pengeditan bagus untuk versi Swift. Saya akan mengubah .append (item) untuk + = item. Terlihat lebih cepat
Ignacio Inglese
2
Di versi terbaru Swift, ganti AnyObject[]()dengan[AnyObject]()
Ruben Martinez Jr.
5
Ini Berfungsi, hanya setelah masuk ke akun masing-masing di pengaturan (facebook / twitter), Tetapi Di aplikasi foto / aplikasi Catatan, opsi tersedia bahkan jika pengguna tidak masuk, Bisakah Anda menjelaskan, mengapa demikian? Atau ada solusi lain?
Jaldip Katre
4
Saya telah menambahkan suntingan untuk dukungan iOS 8 di iPad - Anda juga perlu mengkonfigurasi UIActivityViewController's UIPopoverControlleratau itu akan macet present…. Sejauh ini saya telah mendapatkan dua penolakan dari tiga hasil edit, jadi dengan asumsi ditolak, mungkin Anda dapat melihat apakah Anda ingin menambahkan hasil edit sendiri. Atau tidak :-)
Benjohn
Oh, hasil edit mengutip jawaban ini yang menjelaskan semuanya.
Benjohn
39

Tambahkan ini untuk menggunakan 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
sumber
2
Jawaban yang lebih disukai untuk saya karena Anda juga menunjukkan pengecualian.
José