2016-08-31 2 views
1

Ich habe eine Klasse mit UIView und möchte einen URL-Link teilen, was ist der richtige Weg, das Freigabeblatt in UIView hinzuzufügen?Swift Freigabeblatt in UIView

Mein aktueller Code versucht, die Aktie Blatt über einen Button-Klick aufzurufen:

//share app 
@IBAction func shareAppBtn(sender: AnyObject) { 
    print("shareAppBtn tapped") 
    let myWebsite = NSURL(string:"http://www.google.com/") 

    guard let url = myWebsite else { 
     print("nothing found") 
     return 
    } 

    let shareItems:Array = [url] 
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil) 
    self.window?.rootViewController!.presentViewController(activityViewController, animated: true, completion: nil) 

} 

Ich versuchte, die Stammansicht des aktuellen UIView zu verwenden, aber ich erhalte eine Fehlermeldung:

Warning: Attempt to present <UIActivityViewController: on <RAMAnimatedTabBarController.RAMAnimatedTabBarController: which is already presenting <SideMenu.UISideMenuNavigationController: Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UIAlertController:) 

Vielen Dank.

+1

Warum rufst du 'presentViewController'on die RootViewController? Versuchen Sie es ohne das "self.window? .rootViewController! .'' – heikomania

+0

Ich hatte ursprünglich versucht, dass tatsächlich, aber das gab mir einen Fehler, da ich es aus einer UIView aufrufen, der Fehler ist:' Verwendung von unaufgelösten Bezeichner 'presentViewController' ' – user3591436

+0

Sie müssen es auf einem ViewController aufrufen, ja. Deine Taste und deine UIView und irgendwie in einem ViewController? – heikomania

Antwort

0

Sie fügen kein Freigabeblatt in einer UIView hinzu. Ein Share-Sheet ist ein View-Controller und benötigt daher immer einen anderen View-Controller, um einen Kontext für die Präsentation bereitzustellen.

Sie haben dies getan, indem Sie die Stammansicht der aktuellen Ansicht verwendet haben, die bereits einen Navigationscontroller UISideMenuNavigationController darstellt.

Versuchen aus diesem Kontext präsentiert:

sideMenuNavigationController.presentViewController(activityViewController, animated: true, completion: nil) 
+0

Vielen Dank, aber leider hat das nicht funktioniert, ich bekomme eine 'Verwendung von nicht aufgelösten Bezeichner 'SideMenuNavigationController''Fehler. Ich denke, ich bekomme das Konzept, das Share Sheet nicht aufrufen zu können, weil ich in einer UIView bin, das wäre einfacher, wenn es ein anderer View-Controller wäre. – user3591436

+0

Bitte überprüfen Sie, wie der Navigationscontroller in Ihrem Code benannt ist. Das war nur eine Vermutung, die aus dem Kontext Ihrer Fehlermeldung stammt. – ff10

+0

Ahh, mein Fehler, den Navigationscontroller mit der Root - Ansicht für die 'SideMenu' Klasse aufzurufen, ist' UISideMenuNavigationController', allerdings bekomme ich denselben Fehler: 'Verwendung der unaufgelösten Kennung 'UISideMenuNavigationController'' – user3591436