Потяните, чтобы обновить не работает в iOS WebView
Я реализовал прямо вперед WKWebView
в iOS
var refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: Selector("refreshWebView"), forControlEvents: UIControlEvents.ValueChanged)
Это в viewDidLoad()
И соответствующий refreshWebView
функция. Но когда я запускаю его на мобильном телефоне или на симуляторе, независимо от того, сколько я перетаскиваю, нет ничего, чтобы обновить действие. Ничего не сработало, и я почти чувствую, что застрял в верхних границах экрана. Где может быть не так?
6 ответов
Попробуйте изменить свой код следующим образом, если вы хотите потянуть на 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()
}
Надеюсь, что это поможет вам.
Решение 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)
Надеюсь, что это работает..