与 UIActivityViewController 共享 PDF 文件 [英] share PDF file with UIActivityViewController

查看:39
本文介绍了与 UIActivityViewController 共享 PDF 文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to share a PDF file using UIActivityViewController but when I press the button I do not have options to share the file How can I show these options ?

![](https://i.stack.imgur.com/ywDQw.jpg

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)
        }
    }
}

推荐答案

在 SWIFT 4 中

In SWIFT 4

@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
    }
}

这篇关于与 UIActivityViewController 共享 PDF 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆