Tirer pour rafraîchir ne fonctionne pas dans iOS WebView

J'ai implémenté un WKWebView dans iOS.

  var refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: Selector("refreshWebView"), forControlEvents: UIControlEvents.ValueChanged) 

C'est dans viewDidLoad()

Et la fonction refreshWebView correspondante. Mais quand je l'exécute sur un mobile ou un simulateur, peu importe combien je traîne, il n'y a pas de pull pour rafraîchir l'action. Rien n'est déclenché, et j'ai presque l'printing d'être coincé dans les limites supérieures de l'écran. Où peut-il aller mal?

Essayez de modifier votre code comme ceci, Si vous voulez tirer pour refresh le webView vous devez UIRefreshControl object addSubView UIRefreshControl dans le ScrollView de webView comme ceci

 let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(self.refreshWebView(_:)), forControlEvents: UIControlEvents.ValueChanged) webView.scrollView.addSubview(refreshControl) 

Ajoutez func comme ceci

 func refreshWebView(sender: UIRefreshControl) { print("refersh") webView.loadRequest(NSURLRequest(URL: NSURL(ssortingng: "https://google.com")!)) sender.endRefreshing() } 

J'espère que ceci vous aidera.

Vous devez activer le rebond pour la scrollview du webview:

 webView.scrollView.bounces = true 

Cela vous permettra de faire glisser le webview vers le bas ce qui triggersra votre UIRefreshControl.

Juste pour dire cela dans Swift 3 et la réponse de JAck m'a aidé à résoudre ce problème:

dans loadView () / viewDidLoad ()

 webView.scrollView.bounces = true let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView), for: UIControlEvents.valueChanged) webView.scrollView.addSubview(refreshControl) 

puis une fonction séparée

 func refreshWebView(sender: UIRefreshControl) { print("refersh") // sender.endRefreshing() } 

Et je vois maintenant le rafraîchissement en cours d'printing.

Essayez de déclarer ceci comme ci-dessous.

 refreshControl.addTarget(self, action: #selector(yourViewController.refreshWebView), forControlEvents: UIControlEvents.ValueChanged) 

J'espère que cela fonctionne ..

Le code suivant mettra le contrôle de rafraîchissement dans scrollview de webview. Initialement, il va charger google.com. Pour voir tirer pour se rafraîchir clairement, j'ai mis la couleur blanche à l'arrière-plan de la vue de défilement de sorte qu'il est clairement visible et sur tirer pour rafraîchir webview ouvre la page facebook.

 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.refreshControl = UIRefreshControl.init() refreshControl!.addTarget(self, action:#selector(refreshControlClicked), for: UIControlEvents.valueChanged) self.webView.scrollView.addSubview(self.refreshControl!) self.webView.scrollView.backgroundColor = UIColor.white self.webView.delegate = self let url:URL = URL.init(ssortingng:"https://www.google.com")! self.loadRequestWithUrl(URLRequest.init(url: url)) } func webViewDidStartLoad(_ webView: UIWebView) { NSLog("website loaded") } func loadRequestWithUrl(_ urlRequest : URLRequest?){ if(urlRequest != nil){ self.webView.loadRequest(urlRequest!) } } func refreshControlClicked(){ let url:URL = URL.init(ssortingng:"https://www.facebook.com")! self.loadRequestWithUrl(URLRequest.init(url: url)) }