Estoy trabajando en el código siguiente y tratando de mostrar un indicador de actividad en la vista, mientras que la página se está cargando..

He tratado de aplicar la WKNavigationDelegate métodos, pero estoy fallando, como no se ve nada.

Sugerencias sobre cómo solucionar este problema?

Yo no soy la configuración de la SupportWebView ver delegado en cualquier lugar pero no sé cómo hacerlo en swift..

import UIKit
import WebKit

class SupportWebView: UIViewController, WKNavigationDelegate {
    @IBOutlet var containerView : UIView? = nil

    var webView: WKWebView?

    override func loadView() {
        super.loadView()
        self.webView = WKWebView()
        self.view = self.webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        var dataManager = DataManager.sharedDataManager()
        var url = dataManager.myValidURL
        var req = NSURLRequest(URL:url!)
        self.webView!.loadRequest(req)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        //Dispose of any resources that can be recreated.
    }

    func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    }


    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    }
}
  • Este código hará que el indicador de actividad en la barra de estado a la vuelta. No hay nada más? O es que no se muestra en la barra de estado de cualquiera de los dos?
  • no hay ningún indicador de actividad de la muestra en la barra de estado.. sería genial hacer algo similar a safari, que muestra una barra de progreso…
  • Parece ser que faltan self.webView.navigationDelegate=self;?
  • Yo uso este HUD para mostrar el progreso: github.com/jdg/MBProgressHUD. Esto pondrá un gran indicador de actividad o de la barra de progreso en el centro de la pantalla. Si desea que el progreso podría utilizar un temporizador para mantener la actualización y el uso de la self.webView.estimatedProgress de que el temporizador de actualización de la HUD progreso.
  • He añadido la línea @Rory sugerido y funciona. El indicador de actividad de la gira en la esquina superior izquierda de la barra de estado. (iOS 8.3)
InformationsquelleAutor mm24 | 2015-03-31

3 Comentarios

  1. 10

    Como ya se ha comentado, olvidó poner el webView delegado:

    override func loadView() {
        super.loadView()
        self.webView = WKWebView()
        self.webView.navigationDelegate = self
        self.view = self.webView
    }
  2. 7

    Debe utilizar los métodos de delegado para todos los demás efectos, pero la ruta de la clave de monitoreo funciona bien para este propósito.

    Aquí es un Swift 4 aplicación que funciona bien.

    //Somewhere in your view controller
    private var loadingObservation: NSKeyValueObservation?
    
    private lazy var loadingIndicator: UIActivityIndicatorView = {
        let spinner = UIActivityIndicatorView()
        spinner.translatesAutoresizingMaskIntoConstraints = false
        spinner.color = .black
        return spinner
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        //Setup...
    
        loadingObservation = webView.observe(\.isLoading, options: [.new, .old]) { [weak self] (_, change) in
            guard let strongSelf = self else { return }
    
            //this is fine
            let new = change.newValue!
            let old = change.oldValue!
    
            if new && !old {
                strongSelf.view.addSubview(strongSelf.loadingIndicator)
                strongSelf.loadingIndicator.startAnimating()
                NSLayoutConstraint.activate([strongSelf.loadingIndicator.centerXAnchor.constraint(equalTo: strongSelf.view.centerXAnchor),
                                             strongSelf.loadingIndicator.centerYAnchor.constraint(equalTo: strongSelf.view.centerYAnchor)])
                strongSelf.view.bringSubview(toFront: strongSelf.loadingIndicator)
            }
            else if !new && old {
                strongSelf.loadingIndicator.stopAnimating()
                strongSelf.loadingIndicator.removeFromSuperview()
            }
        }
    }
    • Cómo Aumentar el tamaño de cargador con alguna imagen de fondo?
  3. 0

    Por favor, código de abajo, que está trabajando bien[Swift 4.2].

    @IBOutlet weak var wv: WKWebView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
         loadYoutube(videoID: "KqNS7uAvOxk")     
    }

    Ahora la carga del Video de Youtube

     func loadYoutube(videoID:String) {
        guard let youtubeURL = URL(string: "https://www.youtube.com/embed/\(videoID)")
            else { return }
        wv.load( URLRequest(url: youtubeURL) )
        wv.navigationDelegate = self
    }

    Implementar debajo de esta función:

     func showActivityIndicator(show: Bool) {
        if show {
            activityIndicator.startAnimating()
        } else {
            activityIndicator.stopAnimating()
        }
    }

    Aplicar por debajo de estos tres delegado método:

       func webView(_ webView: WKWebView, didFinish navigation: 
        WKNavigation!) {
        showActivityIndicator(show: false)
    }
    
       func webView(_ webView: WKWebView, didStartProvisionalNavigation 
       navigation: WKNavigation!) {
        showActivityIndicator(show: true)
    }
    
       func webView(_ webView: WKWebView, didFail navigation: 
       WKNavigation!, withError error: Error) {
        showActivityIndicator(show: false)
    }

    Hágamelo saber si no está funcionando.

    • Para cualquier ayuda sobre el código fuente, solo un comentario a continuación.

Dejar respuesta

Please enter your comment!
Please enter your name here