Varsayılan iOS 6 paylaşım eylem sayfasını mevcut paylaşım seçenekleriyle nasıl görüntüleyebilirim?


97

Bazı uygulamalar, iOS 6'da paylaşım seçenekleriyle birlikte varsayılan bir eylem sayfası gösterir.

Social Framework , biri oluşturma ve biri istek için olmak üzere yalnızca iki sınıfa sahiptir.

Yine de bulduğum şey, SLComposeViewController ile belirli bir hizmet için oluşturma ile ilgili ve bunu göstermeden önce, hizmetin mevcut olup olmadığını elle sorgulamalıyım. Ve sonra kendi simgelerimle kendi eylem sayfamı oluşturmam gerekiyor.

Bu uygulamalar iOS 6'da bu varsayılan paylaşım seçenekleri eylem sayfasını nasıl gösteriyor? Yoksa açık kaynaklı bir çerçeve mi kullanıyorlar?


wechat, weibo, qq gibi özel ikonlu paylaşım sayfasını açmak ve işlevselliğini entegre etmek istiyorum, bunu nasıl yapabilirim?
Ravi Ojha

Bu bağlantıyı da kontrol edin .. stackoverflow.com/a/35267035/3908884
Doshi ile tanışın

Yanıtlar:


223

Diğer cevapta belirtilen UIActivityViewController bunu önemsiz kılıyor. Tek yapmanız gereken, paylaşmak istediğiniz metni / resmi / URL'yi belirtmek ve modsal olarak etkinlik görünümü denetleyicisini sunmaktır; iOS, tüm uygulanabilir paylaşım hizmetlerini otomatik olarak görüntüler. Örnekler:

Amaç-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
Swift versiyonu için güzel düzenleme. Bir + = öğe için .append (öğe) 'yi değiştirirdim. Daha hızlı görünüyor
Ignacio Inglese

2
Swift son sürümünde, yerini AnyObject[]()ile[AnyObject]()
Ruben Martinez Jr.

5
Çalışıyor, sadece ayarlarda (facebook / twitter) ilgili hesaplara giriş yaptıktan sonra, Ama fotoğraflar uygulamasında / Notlar uygulamasında, seçenekler kullanıcı oturum açmamış olsa bile kullanılabilir, lütfen açıklar mısınız, neden böyle? Veya başka bir çözüm var mı?
Jaldip Katre

4
İPad'de iOS 8 desteği için bir düzenleme ekledim - UIActivityViewController'leri de yapılandırmanız gerekir, UIPopoverControlleryoksa kilitlenir present…. Düzenlemede şimdiye kadar üçten iki red aldım, bu yüzden reddedildiğini varsayarsak, düzenlemeyi kendiniz eklemek isteyip istemediğinizi görebilirsiniz. Or değil :-)
Benjohn

Düzenleme, her şeyi açıklayan bu cevaba atıfta bulunuyor .
Benjohn

39

Kullanmak için bunu ekleyin 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
Hariç tutmayı da gösterdiğiniz için bana tercih edilen cevap.
José
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.