SwiftModalWebVC.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // SwiftModalWebVC.swift
  3. //
  4. // Created by Myles Ringle on 24/06/2015.
  5. // Transcribed from code used in SVWebViewController.
  6. // Copyright (c) 2015 Myles Ringle & Oliver Letterer. All rights reserved.
  7. //
  8. import UIKit
  9. @objc public protocol SwiftModalWebVCDelegate: class {
  10. @objc func didStartLoading()
  11. @objc func didReceiveServerRedirectForProvisionalNavigation(url: URL)
  12. @objc func didFinishLoading(success: Bool, url: URL)
  13. @objc func webDismiss()
  14. @objc func decidePolicyForNavigationAction(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
  15. }
  16. public class SwiftModalWebVC: UINavigationController {
  17. @objc public weak var delegateWeb: SwiftModalWebVCDelegate?
  18. weak var webViewDelegate: UIWebViewDelegate? = nil
  19. @objc public convenience init(urlString: String, colorText: UIColor, colorDoneButton: UIColor, doneButtonVisible: Bool, hideToolbar: Bool = false) {
  20. let url = URL(string: urlString)!
  21. self.init(request: URLRequest(url: url), colorText: colorText, colorDoneButton: colorDoneButton, doneButtonVisible: doneButtonVisible, hideToolbar: hideToolbar)
  22. }
  23. public init(request: URLRequest, colorText: UIColor = UIColor.white, colorDoneButton: UIColor = UIColor.black, doneButtonVisible: Bool = false, hideToolbar: Bool = false) {
  24. let webViewController = SwiftWebVC(aRequest: request, hideToolbar: hideToolbar)
  25. webViewController.storedStatusColor = UINavigationBar.appearance().barStyle
  26. super.init(rootViewController: webViewController)
  27. let doneButton = UIBarButtonItem(image: SwiftWebVC.bundledImage(named: "SwiftWebVCDismiss"), style: UIBarButtonItem.Style.plain, target: webViewController, action: #selector(SwiftWebVC.doneButtonTapped))
  28. doneButton.tintColor = colorDoneButton
  29. webViewController.buttonColor = colorText
  30. webViewController.titleColor = colorText
  31. webViewController.view.backgroundColor = UIColor.clear
  32. UINavigationBar.appearance().barStyle = UIBarStyle.default
  33. if (doneButtonVisible == true) {
  34. if (UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad) {
  35. webViewController.navigationItem.leftBarButtonItem = doneButton
  36. }
  37. else {
  38. webViewController.navigationItem.rightBarButtonItem = doneButton
  39. }
  40. }
  41. webViewController.delegate = self
  42. }
  43. override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
  44. super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
  45. }
  46. required public init(coder aDecoder: NSCoder) {
  47. fatalError("init(coder:) has not been implemented")
  48. }
  49. override public func viewWillAppear(_ animated: Bool) {
  50. super.viewWillAppear(false)
  51. }
  52. public override func viewWillDisappear(_ animated: Bool) {
  53. super.viewDidDisappear(animated)
  54. }
  55. public override func viewDidDisappear(_ animated: Bool) {
  56. super.viewDidDisappear(animated)
  57. }
  58. }
  59. extension SwiftModalWebVC: SwiftWebVCDelegate {
  60. public func didStartLoading() {
  61. self.delegateWeb?.didStartLoading()
  62. }
  63. public func didReceiveServerRedirectForProvisionalNavigation(url: URL) {
  64. self.delegateWeb?.didReceiveServerRedirectForProvisionalNavigation(url: url)
  65. }
  66. public func didFinishLoading(success: Bool) {
  67. print("Finished loading. Success: \(success).")
  68. }
  69. public func didFinishLoading(success: Bool, url: URL) {
  70. self.delegateWeb?.didFinishLoading(success: success, url: url)
  71. }
  72. public func webDismiss() {
  73. self.delegateWeb?.webDismiss()
  74. }
  75. public func decidePolicyForNavigationAction(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
  76. self.delegateWeb?.decidePolicyForNavigationAction(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
  77. }
  78. }