如何向自定义 UIWebview 添加“打开方式”功能?

Posted

技术标签:

【中文标题】如何向自定义 UIWebview 添加“打开方式”功能?【英文标题】:How do you add a "Open in.." Function to a custom UIWebview? 【发布时间】:2016-04-20 16:30:42 【问题描述】:

我正在尝试使用UIDocumentInteractionController() 使用UIwebview 创建“打开方式...”功能。

我的目标是让用户能够浏览网站并按“打开方式...”按钮将 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】:

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

您首先需要安装 CocoaPods。幸运的是,CocoaPods 是基于 Ruby 构建的,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 是一个基于 Swift 的 HTTP 网络库,适用于 ios 和 Mac OS X。)我们将使用它来下载文件。

键入此命令以使用 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,否则您的项目将无法按预期运行。 接下来,您使用要打开“打开方式...”按钮的 web 视图导航到 .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

【讨论】:

以上是关于如何向自定义 UIWebview 添加“打开方式”功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在divi builder插件中向自定义模块添加字段

向自定义CompoundButton添加涟漪效果

向自定义 UIButton 添加约束不起作用

向自定义视图中的 UIButton 添加操作

在 Eureka 中向自定义规则添加规则

我可以向自定义快餐栏添加边距(扩展 BaseTransientBottomBar)吗?