JCDocumentViewController.swift 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //
  2. // JCDocumentViewController.swift
  3. // JChat
  4. //
  5. // Created by deng on 2017/7/24.
  6. // Copyright © 2017年 HXHG. All rights reserved.
  7. //
  8. import UIKit
  9. import WebKit
  10. class JCDocumentViewController: UIViewController, CustomNavigation {
  11. var filePath: String!
  12. var fileType: String!
  13. var fileData: Data!
  14. override func viewDidLoad() {
  15. super.viewDidLoad()
  16. _init()
  17. }
  18. fileprivate lazy var webView: UIWebView = {
  19. var webView = UIWebView(frame: .zero)
  20. webView.delegate = self
  21. webView.backgroundColor = .white
  22. webView.scrollView.isDirectionalLockEnabled = true
  23. webView.scrollView.showsHorizontalScrollIndicator = false
  24. return webView
  25. }()
  26. private var fileUrl: URL?
  27. private lazy var documentInteractionController = UIDocumentInteractionController()
  28. fileprivate lazy var leftButton = UIButton(frame: CGRect(x: 0, y: 0, width: 60, height: 65 / 3))
  29. private func _init() {
  30. view.backgroundColor = .white
  31. automaticallyAdjustsScrollViewInsets = false
  32. view.addSubview(webView)
  33. _setupNavigation()
  34. view.addConstraint(_JCLayoutConstraintMake(webView, .left, .equal, view, .left))
  35. view.addConstraint(_JCLayoutConstraintMake(webView, .right, .equal, view, .right))
  36. view.addConstraint(_JCLayoutConstraintMake(webView, .top, .equal, view, .top, 64))
  37. view.addConstraint(_JCLayoutConstraintMake(webView, .bottom, .equal, view, .bottom))
  38. let encodeWord = filePath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
  39. let url = URL(fileURLWithPath: encodeWord!)
  40. let fileName = url.lastPathComponent
  41. let path = "\(NSHomeDirectory())/tmp/" + fileName + "." + fileType
  42. if JCFileManager.saveFileToLocal(data: fileData, savaPath: path) {
  43. fileUrl = URL(fileURLWithPath: path)
  44. do {
  45. let string = try String(contentsOf: fileUrl!, encoding: .utf8)
  46. webView.loadHTMLString(string, baseURL: nil)
  47. } catch {
  48. let request = URLRequest(url: fileUrl!)
  49. webView.loadRequest(request)
  50. }
  51. }
  52. }
  53. private func _setupNavigation() {
  54. let navButton = UIButton(frame: CGRect(x: 0, y: 0, width: 18, height: 18))
  55. navButton.setImage(UIImage.loadImage("com_icon_file_more"), for: .normal)
  56. navButton.addTarget(self, action: #selector(_openFile), for: .touchUpInside)
  57. let item1 = UIBarButtonItem(customView: navButton)
  58. navigationItem.rightBarButtonItems = [item1]
  59. customLeftBarButton(delegate: self)
  60. }
  61. func _openFile() {
  62. guard let url = fileUrl else {
  63. return
  64. }
  65. documentInteractionController.url = url
  66. documentInteractionController.delegate = self
  67. documentInteractionController.presentOptionsMenu(from: .zero, in: self.view, animated: true)
  68. }
  69. }
  70. extension JCDocumentViewController: UIDocumentInteractionControllerDelegate {
  71. func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
  72. return self
  73. }
  74. func documentInteractionControllerViewForPreview(_ controller: UIDocumentInteractionController) -> UIView? {
  75. return self.view
  76. }
  77. func documentInteractionControllerRectForPreview(_ controller: UIDocumentInteractionController) -> CGRect {
  78. return self.view.frame
  79. }
  80. }
  81. extension JCDocumentViewController: UIWebViewDelegate {
  82. func webViewDidFinishLoad(_ webView: UIWebView) {
  83. print("webViewDidFinishLoad")
  84. }
  85. func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
  86. print(error.localizedDescription)
  87. }
  88. }
  89. extension JCDocumentViewController: UIGestureRecognizerDelegate {
  90. public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
  91. return true
  92. }
  93. }