2016-11-26 7 views
0

私のアプリにwkwebviewがあり、アクティビティインジケータを追加したいと思います。私は、それがどこに表示されているWebviewが読み込まれているときに消えて、ロードが終了するたびに消えて、それが消えます。これを行うためのコードを私に教えてもらえますか?WKWebViewにアクティビティインジケータを追加する方法(Swift 3)

@IBOutlet weak var Activity: UIActivityIndicatorView! 
var webView : WKWebView! 


@IBOutlet var containerView: UIView? = nil 


override func viewDidLoad() { 
    super.viewDidLoad() 

    guard let url = URL(string: "http://ifunnyvlogger.wixsite.com/ifunnyvlogger/app-twitter") else { return } 

    webView = WKWebView(frame: self.view.frame) 
    webView.translatesAutoresizingMaskIntoConstraints = false 
    webView.isUserInteractionEnabled = true 
    webView.navigationDelegate = self 

    self.view.addSubview(self.webView) 

    let request = URLRequest(url: url) 
    webView.load(request) 

} 


func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 

    // Check if a link was clicked 
    if navigationAction.navigationType == .linkActivated { 

     // Verify the url 
     guard let url = navigationAction.request.url else { return } 
     let shared = UIApplication.shared 

     // Check if opening in Safari is allowd 
     if shared.canOpenURL(url) { 

      // Ask the user if they would like to open link in Safari 
      let alert = UIAlertController(title: "Do you want to open Safari?", message: nil, preferredStyle: .alert) 
      alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { (alert: UIAlertAction) -> Void in 
       // User wants to open in Safari 
       shared.open(url, options: [:], completionHandler: nil) 
      })) 
      alert.addAction(UIAlertAction(title: "Opps, no.", style: .cancel, handler: nil)) 

      present(alert, animated: true, completion: nil) 

     } 
     decisionHandler(.cancel) 
    } 
    decisionHandler(.allow) 
} 

func webViewDidStartLoad(_ : WKWebView) { 
    Activity.startAnimating() 
} 

func webViewDidFinishLoad(_ : WKWebView) { 
    Activity.startAnimating() 
} 

あなたがあなたのwebViewのためにしただけのようsubViewとしてactivityIndicatorを追加する必要があり、私はviewDidLoadではXcodeの8と3

+0

あなたの問題は何ですか? – shallowThought

+0

WKWebViewにアクティビティインジケータを追加する手助けが必要です.Webviewがロードされているときに表示され、ロードが終了すると消えて消えます。これを行うためのコードを私に教えてもらえますか? – iFunnyVlogger

答えて

4

以下のコードは正常に動作しています。

@IBOutlet weak var Activity: UIActivityIndicatorView! 
    var webView : WKWebView! 
    @IBOutlet var containerView: UIView? = nil 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     guard let url = URL(string: "http://www.facebook.com") else { return } 
     webView = WKWebView(frame: self.view.frame) 
     webView.translatesAutoresizingMaskIntoConstraints = false 
     webView.isUserInteractionEnabled = true 
     webView.navigationDelegate = self 
     self.view.addSubview(self.webView) 
     let request = URLRequest(url: url) 
     webView.load(request) 

     // add activity 
     self.webView.addSubview(self.Activity) 
     self.Activity.startAnimating() 
     self.webView.navigationDelegate = self 
     self.Activity.hidesWhenStopped = true 

    } 

これら二つのデリゲートメソッドの下に実装します

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 
     Activity.stopAnimating() 
    } 

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { 
     Activity.stopAnimating() 
    } 

は、それが動作しない場合、私に教えてください。

+0

アクティビティインジケータは機能していますが、Webビューのコンテンツが読み込まれていません。 – iFunnyVlogger

+0

あなたはURLを共有できますか? – Sandy

0

迅速を使ってiOSアプリを作成しています:ここでは今の私のコードです。それはコンセントなので、activityIndicatorがあなたのwebViewの上に座っていることを確認してください。 webViewのローディングを停止したときにactivity.hiddentrueに設定することもできます。

「アクティビティ」アウトレットを小文字にしておくのもよいでしょう。

override func viewDidLoad() { 
super.viewDidLoad() 
self.view.addSubview(self.Activity) 

guard let url = URL(string: "http://ifunnyvlogger.wixsite.com/ifunnyvlogger/app-twitter") else { return } 

webView = WKWebView(frame: self.view.frame) 
webView.translatesAutoresizingMaskIntoConstraints = false 
webView.isUserInteractionEnabled = true 
webView.navigationDelegate = self 

self.view.addSubview(self.webView) 


let request = URLRequest(url: url) 
webView.load(request) 

またwebViewDidFinishLoad()activity.startAnimatingを呼び出します。 webViewのロードが完了したらactivity.stopAnimating()に電話してください。ハッピーコーディング!

func webViewDidFinishLoad(_ : WKWebView) { 
    Activity.stopAnimating() 
    Activity.hidden = true 
} 
関連する問題