1

Ich versuche eine "Öffnen in ..." -Funktion mit UIDocumentInteractionController() Verwenden Sie eine UIwebview.Wie fügen Sie einer benutzerdefinierten UIWebview eine "Open in .." -Funktion hinzu?

Mein Ziel ist es, Benutzer in der Lage zu sein, eine Website zu navigieren und die Schaltfläche "Öffnen in ..." zu drücken, um ein PDF/DOCX von einer Website zu einer anderen App wie Noteability zu verschieben.

Was ich in meinem Code tun möchte, ist das Herunterladen der Seite, auf der der Benutzer gerade ist und dann versuchen, diese Datei in der UIDocumentInteractionController() zu öffnen, um in eine andere App geschoben werden.

Es scheint nicht zu funktionieren, und ich brauche Hilfe herauszufinden, was ich tun muss.

Hier ist der Code, den ich verwende.

class DetailViewController: UIViewController, UIWebViewDelegate, UITextFieldDelegate, UIPopoverPresentationControllerDelegate, SFSafariViewControllerDelegate { 
    @IBOutlet weak var WebSiteView: UIWebView! 
    ... 

    var docController: UIDocumentInteractionController! 

    ... 

     @IBAction func OpenInPressed(sender: AnyObject) { 
    let yourURL = WebSiteView.request?.URL! 
      let urlRequest = NSURLRequest(URL: yourURL!) 

      let theData = try? NSURLConnection.sendSynchronousRequest(urlRequest, returningResponse: nil) 



var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! 

      docURL = docURL.URLByAppendingPathComponent("myFileName.pdf") 

      theData?.writeToURL(docURL, atomically: true) 

      docController = UIDocumentInteractionController(URL: docURL) 

      docController.presentOptionsMenuFromRect(sender.frame, inView:self.view, animated:true) 


     } 


    } 

Antwort

0

Dies ist, was ich getan habe, um das Problem zu lösen.

Sie müssen zuerst CocoaPods installieren. Glücklicherweise basiert CocoaPods auf Ruby, das mit allen aktuellen Versionen von Mac OS X ausgeliefert wird. Dies ist seit OS X 10.7 der Fall.

Im Terminal Typ

sudo gem install cocoapods 

dann diesen Befehl im Terminal eingeben um die Installation abzuschließen:

pod setup --verbose 

Terminal öffnen und in das Verzeichnis navigieren, die Ihr Projekt enthält durch den CD-Befehl:

cd ~/Path/To/Folder/Containing/project 

Geben Sie als nächstes diesen Befehl ein:

pod init 

Dies erstellt eine Podfile für Ihr Projekt. Jetzt müssen wir AlamoFire hinzufügen. (Alamofire ist eine Swift-basierte HTTP-Netzwerkbibliothek für iOS und Mac OS X.) Wir werden dies verwenden, um die Datei herunterzuladen.

Geben Sie diesen Befehl, um die Podfile mit Xcode zur Bearbeitung zu öffnen:

open -a Xcode Podfile 

dann mit dieser den oberen Zeilen des Podfile ersetzen:

source 'https://github.com/CocoaPods/Specs.git' 
platform :ios, '9.0' 
use_frameworks! 

Dann sollten Sie auch diese Änderung vornehmen:

target 'Project' do 

pod 'Alamofire', '~> 3.3' 

end 

Um Alamofire zu Ihrem Projekt hinzuzufügen.

Nachdem Sie das getan haben, speichern und schließen Sie die Poddatei. Zurück zum Terminal und Typ:

pod install 

Wenn das Xcode-Projekt geöffnet ist, schließen Sie es jetzt und offen project.xcworkspace statt. Sie müssen den .xcworkspace öffnen oder Ihr Projekt wird nicht wie beabsichtigt ausgeführt. Als nächstes navigieren Sie zur .swift-Datei mit der Webansicht, in der Sie versuchen, eine "Öffnen in ..." - Schaltfläche zu öffnen. und fügen Sie diese an der Spitze:

import Alamofire 

Diese Sie einen Fehler geben wird es einfach ignorieren und wenn Sie Ihr Projekt ausführen wird es installieren und beheben den Fehler selbst. Weiter gehen Sie zu Ihrem @IBAction func Darin hinzufügen:

@IBAction func OpenInPressed(sender: AnyObject) { 
    var localPath: NSURL? 
    Alamofire.download(.GET, 
     (WebSiteView.request?.URL?.absoluteString)!, 
     destination: { (temporaryURL, response) in 
      let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] 
      let pathComponent = response.suggestedFilename 

      localPath = directoryURL.URLByAppendingPathComponent(pathComponent!) 
      return localPath! 
    }) 
     .response { (request, response, _, error) in 
      if localPath != nil{ 
       self.docController = UIDocumentInteractionController(URL: localPath!) 

       self.docController.presentOptionsMenuFromBarButtonItem(sender as! UIBarButtonItem, animated: true) 

      } 
     } 
    } 

So können Sie nun eine pdf/docx oder jede Datei, die Sie auf einer Webseite anzeigen können und es zu einer anderen App drücken. Wenn Sie eine Schaltfläche und kein BarButtonItem verwenden möchten, wechseln Sie einfach .presentOptionsMenuFromBarButtonItem zu .presentOptionsMenuFromRect Und ändern Sie dann sender as! UIBarButtonItem zu sender.frame