首页 > 解决方案 > 在 Swift 上完成触摸拖动后如何刷新?

问题描述

我的零件有问题refresh。目前,to的功能refresh还可以。

但是我想在用户完成触摸 iphone 时刷新。

var refController:UIRefreshControl = UIRefreshControl()
override func viewDidLoad() {
    super.viewDidLoad()
    refController.bounds = CGRect.init(x: 0.0, y: 40.0, width: refController.bounds.size.width, height: refController.bounds.size.height)
    refController.addTarget(self, action: #selector(self.webviewRefresh(refresh:)), for: .valueChanged)
    refController.attributedTitle = NSAttributedString(string: "refreshing")
    WKWebView.scrollView.addSubview(refController)
    if contentController.userScripts.count > 0 {
        contentController.removeAllUserScripts()
    }
...
}
@objc func webviewRefresh(refresh:UIRefreshControl){
    refController.endRefreshing()
    WKWebView.reload()
}

目前,即使此时用户还没有完成触摸,当屏幕下降到一定高度时,也会对屏幕进行一次刷新。

但是我想在用户完成触摸屏幕后运行刷新。

标签: iosswiftrefresh

解决方案


scrollViewDidEndDecelerating您必须在 的委托方法中调用刷新方法UIScrollViewDelegate。所以导入UIScrollViewDelegate你的ViewController喜欢,

extension YourViewController: UIScrollViewDelegate {
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        if self.refController.isRefreshing {
            self.webviewRefresh()
        }
    }
}

那么你的webviewRefresh意愿是,

    @objc func webviewRefresh(){
        refController.endRefreshing()
        WKWebView.reload()
    }

而你的viewDidLoad意志是,

   override func viewDidLoad() {
        super.viewDidLoad()
        refController.bounds = CGRect.init(x: 0.0, y: 40.0, width: refController.bounds.size.width, height: refController.bounds.size.height)
        refController.attributedTitle = NSAttributedString(string: "refreshing")
        WKWebView.scrollView.addSubview(refController)
        WKWebView.scrollView.delegate = self
        if contentController.userScripts.count > 0 {
            contentController.removeAllUserScripts()
        }
    }

推荐阅读