2016-07-02 11 views
6

Wprowadziłem prostą wersję WKWebView w iOS.Pociągnij, aby odświeżyć, nie działa w iOS WebView

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

Jest to viewDidLoad()

a odpowiadający refreshWebView funkcji. Ale kiedy uruchomię go na telefonie komórkowym lub symulatorze, bez względu na to, ile przeciągam, nie ma potrzeby ciągnięcia odświeżania. Nic nie jest wyzwalane i prawie wydaje się, że utknąłem na górnych krawędziach ekranu. Gdzie może pójść źle?

+0

W widoku webView zostanie wyświetlony widok "uruchom" (mam na myśli blok ładujący widok). Zrób to w swojej ** refreshWebView() ** metodzie – JAck

+0

refreshWebView nigdy nie zostanie wywołany. – RandomGuy

+0

Jakieś rozwiązanie tego? –

Odpowiedz

9

spróbować zmienić swój kod tak, Jeśli chcesz, aby pociągnąć do refreshwebView trzeba addSubViewUIRefreshControl obiektu w ScrollView z webView jak ten

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

Dodaj func tak

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

Mam nadzieję, że to ci pomoże.

+0

Zrobiłem to. I wciąż bez zmian. – RandomGuy

+0

Czy dodałeś funkcję, zredagowałem odpowiedź, a która z nich jest szybka, szybka 2, szybka 2.2 lub większa? –

+0

Przepraszam, wypróbowałem to i wciąż nic. "Odśwież" nigdy nie jest drukowane. I wydaje się, że po prostu nie jest wyzwalany. – RandomGuy

0

Spróbuj zadeklarować jak poniżej.

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

Nadzieja to działa ..

2

Musisz włączyć odbijając na Scrollview na WebView:

webView.scrollView.bounces = true 

To pozwoli Ci przeciągnij webview dół który wywoła swój UIRefreshControl.

2

po prostu powiedzieć patrząc na to w Swift 3 i odpowiedź z Jack pomógł mi rozwiązać ten problem:

w loadview()/viewDidLoad()

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

a następnie oddzielna funkcja

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

Teraz widzę drukowane odświeżanie.

0

Poniższy kod umieści kontrolkę odświeżania w przewijanym widoku strony internetowej. Początkowo załaduje on google.com. Aby zobaczyć wyraźne odświeżenie, ustawiłem biały kolor na tle widoku przewijania, dzięki czemu jest on wyraźnie widoczny, a po uruchomieniu odświeżenia strona otwiera się na facebooku.

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)) 
} 
Powiązane problemy