2015-08-02 13 views
8

Non riesco a convincere la mia applicazione a condividere correttamente un URL in modo che gli elementi di attività "Apri in Safari" e "Apri in Chrome" vengano visualizzati nel foglio di condivisione. Ho provato condividendo l'URL diversi modi:Come visualizzare l'icona "Apri in Safari" quando si condivide un URL utilizzando UIActivityViewController?

NSURL *data = _article.url; 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[data] applicationActivities:nil]; 
  • Come un elemento NSData utilizzando [NSData dataWithContentsOfURL:];
  • Come NSURL
  • Come NSString che utilizza [myURL absoluteString];
  • con la combinazione di NSURL (l'url) e NSString (il titolo)

Per riferimento, questi sono i due elementi di attività che sto cercando di arrivare a vedere.

enter image description here

risposta

3

sembra che ci sia una libreria molto popolare "SVWebViewController" per la visualizzazione nelle viste Web App. La libreria contiene anche alcuni elementi di attività utili che è possibile utilizzare per eseguire questa operazione.

https://github.com/TransitApp/SVWebViewController

Ecco un esempio di codice è possibile utilizzare per farlo funzionare (non dimenticare di includere gli header nel codice pure)

#import "SVWebViewControllerActivityChrome.h" 
#import "SVWebViewControllerActivitySafari.h" 

- (void)share:(id)sender { 
    NSArray *activities = @[[SVWebViewControllerActivitySafari new], [SVWebViewControllerActivityChrome new]]; 
    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[_article.url] applicationActivities:activities]; 
} 
+0

Fa schifo davvero da parte di Apple di non avere un built -in opzione per Safari durante la condivisione di NSURL. – Mahouk

2
Ci

pochi (piccola) librerie che puoi utilizzare che forniscono controlli personalizzati UIActivity per ottenere gli elementi di attività "Apri in Safari" e "Apri in Chrome".

  • Safari: TUSafariActivity
  • Chrome: ARChromeActivity

    @IBAction func shareClick(_ sender: Any) { 
        var sharingItems = [AnyObject]() 
        var sharingActivities = [UIActivity]() 
    
        sharingItems.append(URL(string: shareURL)! as AnyObject) 
        sharingActivities.append(TUSafariActivity()) 
        sharingActivities.append(ARChromeActivity()) 
    
        let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: sharingActivities) 
        activityViewController.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem; 
        self.present(activityViewController, animated: true, completion: nil) 
    } 
    

Ancora più personalizzato UIActivity controlli possono essere trovati sul https://github.com/shu223/UIActivityCollection