Потяните, чтобы обновить не работает в iOS WebView

Я реализовал прямо вперед WKWebView в iOS

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

Это в viewDidLoad()

И соответствующий refreshWebView функция. Но когда я запускаю его на мобильном телефоне или на симуляторе, независимо от того, сколько я перетаскиваю, нет ничего, чтобы обновить действие. Ничего не сработало, и я почти чувствую, что застрял в верхних границах экрана. Где может быть не так?

6 ответов

Попробуйте изменить свой код следующим образом, если вы хотите потянуть на refresh webView вам нужно addSubViewUIRefreshControl объект в ScrollView из webView как это

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

Добавьте func вот так

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

Надеюсь, что это поможет вам.

Решение SWIFT 4 (на основе ответа Nirav D)

Вы можете просто вызвать этот метод настройки в вашем viewDidLoad:

private func setupRefreshControl() {
    let refreshControl = UIRefreshControl()
    refreshControl.addTarget(self, action: #selector(refreshWebView(sender:)), for: UIControlEvents.valueChanged)
    webView.scrollView.addSubview(refreshControl)
}

@objc
private func refreshWebView(sender: UIRefreshControl) {
    print("refreshing...")
    webView.load(URLRequest(url: url))
    sender.endRefreshing()
}

Просто скажу, что, глядя на это в Swift 3 и ответ JAck, помог мне решить эту проблему:

в loadView()/viewDidLoad()

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

а потом отдельная функция

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

И теперь я вижу, как распечатывается обновление.

Вы должны включить подпрыгивание для просмотра прокрутки веб-просмотра:

webView.scrollView.bounces = true

Это позволит вам перетащить веб-представление вниз, что вызовет ваш UIRefreshControl.

Следующий код поместит элемент управления обновлением в представление прокрутки webview. Первоначально он загрузит google.com. Чтобы ясно видеть, что обновление обновляется, я установил белый цвет на фоне прокрутки, чтобы он был хорошо виден, а при обновлении веб-просмотра при открытии страницы открывается страница 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(string:"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(string:"https://www.facebook.com")!

    self.loadRequestWithUrl(URLRequest.init(url: url))
}

Попробуйте объявить это, как показано ниже.

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

Надеюсь, что это работает..

Другие вопросы по тегам