Ответ 1
Попробуйте это!
var req = NSURLRequest(URL: url)
webView.delegate = self
webView.loadRequest(req)
Сегодня вечером я играл с веб-представлениями быстро, но столкнулся с проблемой.
По какой-то причине я не могу запустить методы webViewDidStartLoad или webViewDidFinishLoad. В моей раскадровке у меня есть выход под названием webView, связанный с моим элементом UIWebView.
Кто-нибудь может помочь мне в том, что я делаю неправильно?
Это мой файл viewController.swift:
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet var webView : UIWebView
var url = NSURL(string: "http://google.com")
override func viewDidLoad() {
super.viewDidLoad()
//load initial URL
var req = NSURLRequest(URL : url)
webView.loadRequest(req)
}
func webViewDidStartLoad(webView : UIWebView) {
//UIApplication.sharedApplication().networkActivityIndicatorVisible = true
println("AA")
}
func webViewDidFinishLoad(webView : UIWebView) {
//UIApplication.sharedApplication().networkActivityIndicatorVisible = false
println("BB")
}
}
Попробуйте это!
var req = NSURLRequest(URL: url)
webView.delegate = self
webView.loadRequest(req)
У меня возникла одна и та же проблема, даже я подтвердил UIWebViewDelete самостоятельно и реализовал свои методы.
//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")
let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)
выше логика отлично работала с тестом URl, который я получил от быстрого поиска google.
Но я, когда я заменил мое. webViewDidFinishLoad никогда не вызывается.
то как мы решили?
В обратной стороне мы должны были определить тип содержимого в виде документа в заголовках. и это работает как шарм.
Поэтому, пожалуйста, убедитесь, что на стороне сервера также есть.
Как отмечалось другими, установка делегата UIWebView
и соответствие протоколу UIWebViewDelegate
- наилучшее возможное решение.
Для других, кто может это сделать. Я поместил мои методы делегата в private extension
, к которому не мог получить доступ вызывающий делегат. Как только я изменил расширение на internal
, делегаты начали правильно звонить.
Здесь мои 2 цента сражаются с той же проблемой в SWIFT 3:
class HintViewController: UIViewController, UIWebViewDelegate
Объявить методы делегата таким образом (обратите внимание на объявление аргументов):
func webViewDidStartLoad(_ webView: UIWebView)
func webViewDidFinishLoad(_ webView: UIWebView)
Не забудьте установить self в свойство делегата webview либо в Конструкторе интерфейсов (выберите веб-просмотр, перетащите его из выходной панели делегата в веб-просмотр из Инспектора подключений ИЛИ программно: self.webview.delegate = self)
Есть мое подробное решение для Swift 3:
1) в объявлении класса напишите UIWebViewDelegate. Например:
класс MyViewController: UIViewController, UIWebViewDelegate {
2), конечно, в раскадровке сделайте ссылку на свой UIViewController следующим образом: @IBOutlet слабый var webView: UIWebView!
3) в func viewDidLoad добавьте одну строку: self.webView.delegate = self
Ничего больше. Специально думает LinusGeffarth и LLIAJLbHOu для идеи.