与UIActivityViewController共享PDF文件

问题描述 投票:1回答:4

我正在尝试使用UIActivityViewController共享PDF文件但是当我按下按钮时我没有共享文件的选项如何显示这些选项?

![](Qazxswpoi

https://i.stack.imgur.com/ywDQw.jpg
ios swift xcode swift4
4个回答
2
投票

试试这样吧

import UIKit
import PDFKit
import MessageUI
import UIKit.UIGestureRecognizerSubclass

class BookViewController: UIViewController, UIPopoverPresentationControllerDelegate, PDFViewDelegate, ActionMenuViewControllerDelegate, OutlineViewControllerDelegate, MFMailComposeViewControllerDelegate {

    @IBOutlet weak var btn: UIButton!

    var pdfDocument: PDFDocument?

    @IBOutlet weak var pdfView: PDFView!
    @IBOutlet weak var webview: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        pdfView.autoScales = true
        pdfView.displayMode = .singlePage
        pdfView.displayDirection = .horizontal
        pdfView.usePageViewController(true, withViewOptions: [UIPageViewControllerOptionInterPageSpacingKey: 20])

        pdfView.document = pdfDocument
        resume()


        // ActivityViewController
    }


    override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
        coordinator.animate(alongsideTransition: { (context) in
        }, completion: nil)
    }

    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return .none
    }

    func actionMenuViewControllergmailDocument(_ actionMenuViewController: ActionMenuViewController) {

    }

    func actionMenuViewControllerShareDocument(_ actionMenuViewController: ActionMenuViewController) {


    }

    func actionMenuViewControllerPrintDocument(_ actionMenuViewController: ActionMenuViewController) {

    }

    func outlineViewController(_ outlineViewController: OutlineViewController, didSelectOutlineAt destination: PDFDestination) {
        resume()
        pdfView.go(to: destination)
    }

    private func resume() {
        let backButton = UIBarButtonItem(image: #imageLiteral(resourceName: "Chevron"), style: .plain, target: self, action: #selector(back(_:)))
        let actionButton = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(showActionMenu(_:)))
        navigationItem.leftBarButtonItems = [backButton, actionButton]
        pdfView.isHidden = false
    }

    @objc func resume(_ sender: UIBarButtonItem) {
        resume()
    }

    @objc func back(_ sender: UIBarButtonItem) {
        navigationController?.popViewController(animated: true)
    }

    @objc func showActionMenu(_ sender: UIBarButtonItem) {
        if let viewController = storyboard?.instantiateViewController(withIdentifier: String(describing: ActionMenuViewController.self)) as? ActionMenuViewController {
            let activityVC = UIActivityViewController(activityItems: [self.pdfDocument!], applicationActivities: nil)
            activityVC.popoverPresentationController?.sourceView = self.view

            self.present(activityVC, animated: true, completion: nil)
        }
    }
}

它的工作正常......我用它。


2
投票

在SWIFT 4中

let fileManager = FileManager.default 
let docsurl = try! fileManager.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let documentoPath =  docsurl.appendingPathComponent("yourfile.pdf") 

if fileManager.fileExists(atPath: documentoPath){              
   let pdfData = NSData(contentsOfFile: documentoPath) 
    var activityViewController = UIActivityViewController(activityItems: ["Your title that you wanna share", pdfData], applicationActivities: nil)   // and present it
    present(activityViewController, animated: true) {() -> Void in }
}

0
投票

试试这个

@IBAction func sharePDF(_ sender: : Any) {

    let fm = FileManager.default

    var pdfURL = (fm.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
    pdfURL = pdfURL.appendingPathComponent("GridLines.pdf") as URL

    //Rename document name to "Hello.pdf"
    let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("Hello.pdf") as NSURL

    do {
        let data = try Data(contentsOf: pdfURL)

        try data.write(to: url as URL)

        let activitycontroller = UIActivityViewController(activityItems: [url], applicationActivities: nil)
        if activitycontroller.responds(to: #selector(getter: activitycontroller.completionWithItemsHandler))
        {
            activitycontroller.completionWithItemsHandler = {(type, isCompleted, items, error) in
                if isCompleted
                {
                    print("completed")
                }
            }
        }

        activitycontroller.excludedActivityTypes = [UIActivityType.airDrop]
        activitycontroller.popoverPresentationController?.sourceView = self.view
        self.present(activitycontroller, animated: true, completion: nil)

    }
    catch {
        //ERROR
    }
}

0
投票

您已经有一个PDFDocument对象,因此不需要重建文件URL。只需通过您的PDFDocument的let fileManager = FileManager.default let docsurl = try! fileManager.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) let documentoPath = docsurl.appendingPathComponent("documento.pdf") if fileManager.fileExists(atPath: documentoPath){ let documento = NSData(contentsOfFile: documentoPath) let activityViewController: UIActivityViewController = UIActivityViewController(activityItems: [documento!], applicationActivities: nil) activityViewController.popoverPresentationController?.sourceView=self.view present(activityViewController, animated: true, completion: nil) } else { print("document was not found") } 属性:

documentURL
© www.soinside.com 2019 - 2024. All rights reserved.