123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import UIKit
- public protocol SwiftModalWebVCDelegate: class {
- func didStartLoading()
- func didReceiveServerRedirectForProvisionalNavigation(url: URL)
- func didFinishLoading(success: Bool, url: URL)
- func webDismiss()
- func decidePolicyForNavigationAction(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
- }
- public class SwiftModalWebVC: UINavigationController {
-
- public weak var delegateWeb: SwiftModalWebVCDelegate?
-
- public enum SwiftModalWebVCTheme {
- case lightBlue, lightBlack, dark, custom
- }
-
- weak var webViewDelegate: UIWebViewDelegate? = nil
-
- public convenience init(urlString: String) {
- self.init(pageURL: URL(string: urlString)!)
- }
-
- public convenience init(urlString: String, theme: SwiftModalWebVCTheme) {
- self.init(pageURL: URL(string: urlString)!, theme: theme)
- }
-
- public convenience init(urlString: String, theme: SwiftModalWebVCTheme, color: UIColor, colorText: UIColor, doneButtonVisible: Bool, hideToolbar: Bool = false) {
- self.init(pageURL: URL(string: urlString)!, theme: theme, color: color, colorText: colorText, doneButtonVisible: doneButtonVisible, hideToolbar: hideToolbar)
- }
-
- public convenience init(pageURL: URL) {
- self.init(request: URLRequest(url: pageURL))
- }
-
- public convenience init(pageURL: URL, theme: SwiftModalWebVCTheme, color : UIColor = UIColor.clear, colorText: UIColor = UIColor.black, doneButtonVisible: Bool = false, hideToolbar: Bool = false) {
- self.init(request: URLRequest(url: pageURL), theme: theme, color: color, colorText: colorText, doneButtonVisible: doneButtonVisible, hideToolbar: hideToolbar)
- }
-
- public init(request: URLRequest, theme: SwiftModalWebVCTheme = .dark, color: UIColor = UIColor.clear, colorText: UIColor = UIColor.black, doneButtonVisible: Bool = false, hideToolbar: Bool = false) {
-
- let webViewController = SwiftWebVC(aRequest: request, hideToolbar: hideToolbar)
- webViewController.storedStatusColor = UINavigationBar.appearance().barStyle
-
- super.init(rootViewController: webViewController)
- let doneButton = UIBarButtonItem(image: SwiftWebVC.bundledImage(named: "SwiftWebVCDismiss"),
- style: UIBarButtonItem.Style.plain,
- target: webViewController,
- action: #selector(SwiftWebVC.doneButtonTapped))
-
- switch theme {
- case .lightBlue:
- doneButton.tintColor = nil
- webViewController.buttonColor = nil
- webViewController.titleColor = UIColor.black
- UINavigationBar.appearance().barStyle = UIBarStyle.default
- case .lightBlack:
- doneButton.tintColor = UIColor.darkGray
- webViewController.buttonColor = UIColor.darkGray
- webViewController.titleColor = UIColor.black
- UINavigationBar.appearance().barStyle = UIBarStyle.default
- case .dark:
- doneButton.tintColor = UIColor.white
- webViewController.buttonColor = UIColor.white
- webViewController.titleColor = UIColor.groupTableViewBackground
- UINavigationBar.appearance().barStyle = UIBarStyle.black
- case .custom:
- doneButton.tintColor = colorText
- webViewController.buttonColor = colorText
- webViewController.titleColor = colorText
- webViewController.view.backgroundColor = color
- self.navigationBar.isTranslucent = false
- UINavigationBar.appearance().barTintColor = color
-
- self.toolbar.isTranslucent = false
- self.toolbar.barTintColor = color
- }
-
- if (doneButtonVisible == true) {
- if (UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad) {
- webViewController.navigationItem.leftBarButtonItem = doneButton
- }
- else {
- webViewController.navigationItem.rightBarButtonItem = doneButton
- }
- }
- webViewController.delegate = self
- }
-
- override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
- super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
- }
-
- required public init(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override public func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(false)
- }
-
- public override func viewWillDisappear(_ animated: Bool) {
- super.viewDidDisappear(animated)
- }
- public override func viewDidDisappear(_ animated: Bool) {
- super.viewDidDisappear(animated)
- }
- }
- extension SwiftModalWebVC: SwiftWebVCDelegate {
-
- public func didStartLoading() {
- self.delegateWeb?.didStartLoading()
- }
-
- public func didReceiveServerRedirectForProvisionalNavigation(url: URL) {
- self.delegateWeb?.didReceiveServerRedirectForProvisionalNavigation(url: url)
- }
-
- public func didFinishLoading(success: Bool) {
- print("Finished loading. Success: \(success).")
- }
-
- public func didFinishLoading(success: Bool, url: URL) {
- self.delegateWeb?.didFinishLoading(success: success, url: url)
- }
-
- public func webDismiss() {
- self.delegateWeb?.webDismiss()
- }
-
- public func decidePolicyForNavigationAction(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
-
- self.delegateWeb?.decidePolicyForNavigationAction(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
- }
- }
|