Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // ViewController.swift
- // project4
- //
- // Created by VSAA on 7/16/19.
- // Copyright © 2019 VSAA. All rights reserved.
- //
- import UIKit
- import WebKit
- class ViewController: UIViewController, WKNavigationDelegate {
- var webView: WKWebView!
- var progressView: UIProgressView!
- var webSites = ["apple.com", "hackingwithswift.com"]
- override func loadView() {
- webView = WKWebView()
- webView.navigationDelegate = self
- view = webView
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- let url = URL(string: "https://" + webSites[0])!
- webView.load(URLRequest(url: url))
- webView.allowsBackForwardNavigationGestures = true
- navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Open", style: .plain, target: self, action: #selector(openTapped))
- progressView = UIProgressView(progressViewStyle: .default)
- progressView.sizeToFit()
- let progressButton = UIBarButtonItem(customView: progressView)
- let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
- let refresh = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(webView.reload))
- toolbarItems = [progressButton, spacer, refresh]
- navigationController?.isToolbarHidden = false
- webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
- }
- override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
- if keyPath == "estimatedProgress" {
- progressView.progress = Float(webView.estimatedProgress)
- }
- }
- @objc func openTapped() {
- let ac = UIAlertController(title: "Open page...", message: nil, preferredStyle: .actionSheet)
- for website in webSites {
- ac.addAction(UIAlertAction(title: website, style: .default, handler: openPage))
- }
- ac.addAction(UIAlertAction(title: "Cancel", style: .cancel))
- ac.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItem
- present(ac, animated: true)
- }
- func openPage(action: UIAlertAction) {
- let url = URL(string: "https://" + action.title!)!
- webView.load(URLRequest(url: url))
- }
- func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
- title = webView.title
- }
- func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
- let url = navigationAction.request.url
- if let host = url?.host {
- for website in webSites {
- if host.contains(website) {
- decisionHandler(.allow)
- return
- }
- }
- }
- decisionHandler(.cancel)
- /// Вот так вот сразу крашится во время загрузки(появляется Alert и все, выкидывает исключение) Без кода ниже все работает.
- /// let alertController = UIAlertController(title: "Blocked", message: "The url was blocked", preferredStyle: .alert)
- /// let alertAction = UIAlertAction( title : "Ok" ,
- style : .default, handler: nil)
- /// alertController.addAction(alertAction)
- /// self.present(alertController, animated: true, completion: nil)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement