拉动刷新在iOS WebView中无法正常工作

时间:2016-07-02 05:47:32

标签: ios swift wkwebview pull-to-refresh

我在iOS中实现了直接WKWebView

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

这是viewDidLoad()

以及相应的refreshWebView功能。但是当我在移动设备或模拟器上运行它时,无论我拖动多少,都没有拉动刷新动作。什么都没有被触发,几乎感觉我被困在屏幕的上限。哪里可能出错?

6 个答案:

答案 0 :(得分:11)

尝试更改此类代码,如果您想要refresh webView addSubView UIRefreshControl 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()
}

希望这会对你有所帮助。

答案 1 :(得分:5)

SWIFT 4解决方案(基于 Nirav D 答案)

您可以在website中简单地调用此设置方法:

viewDidLoad

答案 2 :(得分:3)

只是说在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()
}

我现在看到正在打印刷新。

答案 3 :(得分:2)

您必须为webview的滚动视图启用弹跳:

webView.scrollView.bounces = true

这样可以将webview向下拖动,这将触发你的UIRefreshControl。

答案 4 :(得分:1)

以下代码会将刷新控件放在webview的scrollview中。最初它会加载google.com。为了看清楚刷新,我已经将白色设置为滚动视图的背景,因此它清晰可见,并且在拉动以刷新webview打开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))
}

答案 5 :(得分:0)

尝试声明如下。

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

希望这有效..