2016-07-02 31 views
6

'da çalışmaya devam etmek için çekerek iOS'ta düz bir ileri doğru uyguladım.iOS WebView

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

Bu viewDidLoad()

ve karşılık gelen refreshWebView olarak işlev görür. Ama ne zaman ne kadar sürüklediğime bakılmaksızın, mobil veya simülatörde çalıştırdığımda, eylemi yenilemek için bir çekiş yoktur. Hiçbir şey tetiklenmez ve neredeyse ekranın üst sınırlarına sıkışmış gibi hissediyorum. Nerede yanlış olabilir? Eğer refresh çekin isterseniz

+0

Lütfen webView görünümünde görünecek görünüm (görünümü yükleyen bloktan bahsediyorum). Bunu ** refreshWebView() ** yönteminde yapın – JAck

+0

refreshWebView hiçbir zaman aranmaz. – RandomGuy

+0

Bunun için herhangi bir çözüm? –

cevap

9

deneyin, böyle kodunuzu değiştirmek için webView bu

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

bu

let refreshControl = UIRefreshControl() 
refreshControl.addTarget(self, action: #selector(self.refreshWebView(_:)), forControlEvents: UIControlEvents.ValueChanged) 
webView.scrollView.addSubview(refreshControl) 
gibi webView arasında ScrollView yılında addSubView UIRefreshControl nesneye ihtiyaç

Umarım bu size yardımcı olacaktır.

+0

Bunu yaptım. Ve hala bir değişiklik yok. – RandomGuy

+0

Fonksiyon eklediniz, cevabı düzenledim ve hangi sürati kullandınız, hızlı 2, hızlı 2.2 veya üstü mü? –

+0

Üzgünüz, bunu denedim ve hala hiçbir şey. "Yenile" sadece basılı değildir. Ve bir şekilde sadece tetiklenmemiş gibi hissettiriyor. – RandomGuy

0

Aşağıdaki gibi bunu bildirmeye çalışın. Bu işleri

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

Umut ..

2

Sen Web görünümündeki ait Scrollview için sıçrayan etkinleştirmek zorunda:

webView.scrollView.bounces = true 

Bu, UIRefreshControl tetikleyeceğini web görüntülemesini aşağı çekmelerine izin edecektir.

2

Sadece Swift 3'te bu bakarak söylemek için ve Jack gelen cevap beni bu sorunu çözmek yardımcı oldu: o zaman

loadView()/viewDidLoad()

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

yılında

ve ayrı fonksiyon

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

Şimdi yazdırılmakta olan yeniliği görüyorum.

0

Aşağıdaki kod, webview.google'ın scrollview öğesinde gezinme denetimini koyacaktır. Başlangıçta google.com yüklenecektir. Çekme işleminin açıkça yenilenmesini görmek için kaydırma görünümünü arka planına beyaz renk ayarladım, böylece açıkça görülebiliyor ve webview'i yenilemek için çekin facebook sayfasını açıyor.

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)) 
}