SwiftModalWebVC.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. public enum SwiftModalWebVCTheme {
  19. case lightBlue, lightBlack, dark, custom
  20. }
  21. weak var webViewDelegate: UIWebViewDelegate? = nil
  22. @objc public convenience init(urlString: String) {
  23. self.init(pageURL: URL(string: urlString)!, theme: .dark, color: UIColor.clear, colorText: UIColor.black, doneButtonVisible: true, hideToolbar: false)
  24. }
  25. public convenience init(urlString: String, theme: SwiftModalWebVCTheme) {
  26. self.init(pageURL: URL(string: urlString)!, theme: theme)
  27. }
  28. public convenience init(urlString: String, theme: SwiftModalWebVCTheme, color: UIColor, colorText: UIColor, doneButtonVisible: Bool, hideToolbar: Bool = false) {
  29. self.init(pageURL: URL(string: urlString)!, theme: theme, color: color, colorText: colorText, doneButtonVisible: doneButtonVisible, hideToolbar: hideToolbar)
  30. }
  31. public convenience init(pageURL: URL) {
  32. self.init(request: URLRequest(url: pageURL))
  33. }
  34. public convenience init(pageURL: URL, theme: SwiftModalWebVCTheme, color : UIColor = UIColor.clear, colorText: UIColor = UIColor.black, doneButtonVisible: Bool = false, hideToolbar: Bool = false) {
  35. self.init(request: URLRequest(url: pageURL), theme: theme, color: color, colorText: colorText, doneButtonVisible: doneButtonVisible, hideToolbar: hideToolbar)
  36. }
  37. public init(request: URLRequest, theme: SwiftModalWebVCTheme = .dark, color: UIColor = UIColor.clear, colorText: UIColor = UIColor.black, doneButtonVisible: Bool = false, hideToolbar: Bool = false) {
  38. let webViewController = SwiftWebVC(aRequest: request, hideToolbar: hideToolbar)
  39. webViewController.storedStatusColor = UINavigationBar.appearance().barStyle
  40. super.init(rootViewController: webViewController)
  41. let doneButton = UIBarButtonItem(image: SwiftWebVC.bundledImage(named: "SwiftWebVCDismiss"), style: UIBarButtonItem.Style.plain, target: webViewController, action: #selector(SwiftWebVC.doneButtonTapped))
  42. switch theme {
  43. case .lightBlue:
  44. doneButton.tintColor = nil
  45. webViewController.buttonColor = nil
  46. webViewController.titleColor = UIColor.black
  47. UINavigationBar.appearance().barStyle = UIBarStyle.default
  48. case .lightBlack:
  49. doneButton.tintColor = UIColor.darkGray
  50. webViewController.buttonColor = UIColor.darkGray
  51. webViewController.titleColor = UIColor.black
  52. UINavigationBar.appearance().barStyle = UIBarStyle.default
  53. case .dark:
  54. doneButton.tintColor = UIColor.black
  55. webViewController.buttonColor = UIColor.white
  56. webViewController.titleColor = UIColor.black// groupTableViewBackground
  57. UINavigationBar.appearance().barStyle = UIBarStyle.black
  58. case .custom:
  59. doneButton.tintColor = colorText
  60. webViewController.buttonColor = colorText
  61. webViewController.titleColor = colorText
  62. webViewController.view.backgroundColor = color
  63. self.navigationBar.isTranslucent = false
  64. UINavigationBar.appearance().barTintColor = color
  65. self.toolbar.isTranslucent = false
  66. self.toolbar.barTintColor = color
  67. }
  68. if (doneButtonVisible == true) {
  69. if (UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad) {
  70. webViewController.navigationItem.leftBarButtonItem = doneButton
  71. }
  72. else {
  73. webViewController.navigationItem.rightBarButtonItem = doneButton
  74. }
  75. }
  76. webViewController.delegate = self
  77. }
  78. override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
  79. super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
  80. }
  81. required public init(coder aDecoder: NSCoder) {
  82. fatalError("init(coder:) has not been implemented")
  83. }
  84. override public func viewWillAppear(_ animated: Bool) {
  85. super.viewWillAppear(false)
  86. }
  87. public override func viewWillDisappear(_ animated: Bool) {
  88. super.viewDidDisappear(animated)
  89. }
  90. public override func viewDidDisappear(_ animated: Bool) {
  91. super.viewDidDisappear(animated)
  92. }
  93. }
  94. extension SwiftModalWebVC: SwiftWebVCDelegate {
  95. public func didStartLoading() {
  96. self.delegateWeb?.didStartLoading()
  97. }
  98. public func didReceiveServerRedirectForProvisionalNavigation(url: URL) {
  99. self.delegateWeb?.didReceiveServerRedirectForProvisionalNavigation(url: url)
  100. }
  101. public func didFinishLoading(success: Bool) {
  102. print("Finished loading. Success: \(success).")
  103. }
  104. public func didFinishLoading(success: Bool, url: URL) {
  105. self.delegateWeb?.didFinishLoading(success: success, url: url)
  106. }
  107. public func webDismiss() {
  108. self.delegateWeb?.webDismiss()
  109. }
  110. public func decidePolicyForNavigationAction(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
  111. self.delegateWeb?.decidePolicyForNavigationAction(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
  112. }
  113. }