2

This is closest code I can find but doesn't have syntax for using the webview page that contains the pdf file.

var docController: UIDocumentInteractionController?

if let path = NSBundle.mainBundle().pathForResource("book", ofType: "pdf") { if let targetURL = NSURL.fileURLWithPath(path) {

    docController = UIDocumentInteractionController(URL: targetURL)
    let url = NSURL(string:"itms-books:");

    if UIApplication.sharedApplication().canOpenURL(url!) {

        docController!.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true)

        println("iBooks is installed")

        }else{

        println("iBooks is not installed")
    }

}

}

  • I upvoted you because its a well worded question and I, also, am looking for an answer to this question and have been unable to find it. If I run into anything ill put it here. – Nate4436271 Apr 23 '15 at 15:13

1 Answers1

-1

Found out you need to write the pdf file to device before opening in ibooks. Here is the code that worked:

func downloadPDF() {
    // Running operations that takes a long time in a background thread is recommended
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
        // Get the PDF data from the URL
        let url = self.webview.request?.URL
        let pdfURL = url?.absoluteString
        let pdfData = NSData(contentsOfURL: NSURL(string: pdfURL!)!)!

        // Store the data locally as a PDF file in the Documents directory
        let documentsDirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String
        localPdfPath = documentsDirPath.stringByAppendingPathComponent(pdfURL!.lastPathComponent)
        pdfData.writeToFile(localPdfPath, atomically: true)

        // UI related stuff should be called in the main thread.
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            self.openIniBooks()
            IJProgressView.shared.hideProgressView()
        })
    })
}