如何向自定义 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 添加“打开方式”功能?的主要内容,如果未能解决你的问题,请参考以下文章