如何在自定义UIWebview中添加“Open in ..”功能?

时间:2016-04-20 16:30:42

标签: ios swift uiwebview uiactivityviewcontroller uidocumentinteraction

我正在尝试使用UIDocumentInteractionController()使用UIwebview制作一个“Open In ...”功能。

我的目标是让用户能够浏览网站并按“打开方式...”按钮将PDF / DOCX从网站推送到另一个应用程序,如Noteability。

我在代码中尝试做的是下载用户当前所在的页面,然后尝试在UIDocumentInteractionController()中打开该文件以推送到另一个应用程序。

它似乎不起作用,我需要帮助弄清楚我必须做什么。

这是我正在使用的代码。

    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)


        }


    }

1 个答案:

答案 0 :(得分:0)

这就是我为解决问题所做的工作。

首先需要安装CocoaPods。幸运的是,CocoaPods是基于Ruby构建的,它附带了所有最新版本的Mac OS X.自OS X 10.7起就是如此。

在终端类型

sudo gem install cocoapods

然后在终端中输入此命令以完成设置:

pod setup --verbose

打开终端并使用cd命令导航到包含项目的目录:

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

接下来,输入以下命令:

pod init

这会为您的项目创建一个Podfile。 现在我们将不得不添加AlamoFire。 (Alamofire是适用于iOS和Mac OS X的基于Swift的HTTP网络库。)我们将使用它来下载文件。

键入此命令以使用Xcode打开Podfile进行编辑:

open -a Xcode Podfile

然后用以下代码替换Podfile的顶行:

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

然后你也应该做出这样的改变:

target 'Project' do

pod 'Alamofire', '~> 3.3'

end

将Alamofire添加到您的项目中。

完成后保存并关闭Podfile。 返回终端并输入:

pod install

如果Xcode项目已打开,请立即关闭它并打开project.xcworkspace。您将不得不打开.xcworkspace,否则您的项目将无法按预期运行。 接下来,您将导航到带有webview的.swift文件,您正试图获得"打开..."按钮。 并在顶部添加:

import Alamofire

这会给你一个错误,只是忽略它,当你运行你的项目时,它将安装并修复错误本身。 接下来转到你的@IBAction func中添加:

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

            }
         }
    }

这将让您现在可以获得pdf / docx或您可以在网站上查看的任何文件,并将其推送到另一个应用程序。如果您想使用按钮而不是BarButtonItem,只需将.presentOptionsMenuFromBarButtonItem切换为.presentOptionsMenuFromRect,然后将sender as! UIBarButtonItem更改为sender.frame