UIWebView 如何实现下拉刷新?

7

我正在尝试在加载网站的UIWebView上实现下拉刷新功能。 UIWebView的代码非常简单。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var WebView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let URL = NSURL(string: "https://the url/")

        WebView.loadRequest(NSURLRequest(URL: URL!))

    }

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

有没有任何示例,因为无论我搜索什么,我只找到了在表视图上进行下拉刷新的示例,而我不确定它是否也适用于这个。

谢谢。

更新1. 根据Sohil的建议,代码如下:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var WebView: UIWebView!
    @IBOutlet weak var scrollView: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let URL = NSURL(string: "https://iremember.gr/")

        WebView.loadRequest(NSURLRequest(URL: URL!))
    }




    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
        func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

            if (scrollView.contentOffset.y < 0){
                //reach top
                print("Reach Top")
                WebView.reload()
            }
            else {
                print("nothing")
            }
        }
    }

}

但是当我尝试重新加载它时,它甚至不会打印出“nothing”。

1
为什么你把滚动视图代理方法添加到 didReceiveMemoryWarning 的实现中? - jrturton
@jrturton 因为我是新手,当我改变它时,它没问题。哈哈哈 - Konstantinos Natsios
2个回答

9

您可以使用UIScrollView来实现该任务。首先,需要检查用户是向上还是向下拉动UIWebView,以下代码将帮助您查看并重新加载UIWebView

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

     if (scrollView.contentOffset.y < 0){
     //reach top
          print("Reach Top")
          webView.reload()
     }
 }

请确保你已将代理添加到UIScrollView中:

webView.scrollView.delegate = self

希望这能帮到你!

我在 WebView 后面添加了一个滚动视图,并且添加了您的代码,但它不起作用。 - Konstantinos Natsios
@KwnstantinosNatsios 兄弟,UIWebView 已经嵌入了 UIScrollView,所以你只需要将代理分配给它即可! - Sohil R. Memon
1
是的,你说得对。我刚刚做了这个,它起作用了。 :D - Konstantinos Natsios
请确保包含UIScrollViewDelegate和UIWebViewDelegate。 - kavehmb

-1

你好,你可以做到这一点

 - (void)viewDidLoad {
 webViewHome.scrollView.delegate = self;
    // Refresh UIControl
    refreshControl = [[UIRefreshControl alloc]init];
    [webViewHome.scrollView addSubview:refreshControl];
    [refreshControl addTarget:self action:@selector(refreshWebview) forControlEvents:UIControlEventValueChanged];

}

Refresh method 
- (void)refreshWebview {
    //TODO: refresh your data
    [refreshControl endRefreshing];
   [self loadWebviewWithUrl:kLoginUrl];
}

 I add refresh control in Did Load method. then I define refresh controller method and in that, I reload my webview.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接