我正在尝试使用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)
}
}
答案 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