我正在尝试使用swift 4中的webView加载URL。我尝试https://www.google.co.in并且它运行正常。并且特定URL的移动网站可以正常使用android。 但是当我在模拟器中尝试这个时,它会永远加载。
我的代码如下:
import UIKit
class WebViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
override func viewDidLoad() {
super.viewDidLoad()
webView.delegate = self
if let url = URL(string: "https://www.myurl.com") {
let request = URLRequest(url: url)
webView.loadRequest(request)
}
}
public func webViewDidStartLoad(_ webView: UIWebView)
{
activityIndicator.center = CGPoint(x: self.view.bounds.size.width/2, y: self.view.bounds.size.height/2)
self.view.addSubview(activityIndicator)
activityIndicator.color = UIColor.red
self.activityIndicator.startAnimating()
}
public func webViewDidFinishLoad(_ webView: UIWebView)
{
self.activityIndicator.stopAnimating()
}
}
我认为我的代码不对。但我想知道我是否可以做任何事情让它在模拟器上运行。
由于
答案 0 :(得分:3)
我刚用你的代码做了一个小项目,在模拟器中没问题,https://www.google.co.in加载得很好。
我注意到你提到你正在使用Swift 4,我认为你应该考虑使用WebKit View(WKWebView
),因为UIWebView
已被弃用。在Apple's documentation中,您可以看到如何实现它,它非常直接。
如果您的证书不受信任,则必须将Info.plist App Transport Security Settings
,Allow Arbitrary Loads
添加到YES。 (不推荐这样做)。
代码非常简单,试一试:
import UIKit
import WebKit
class WebViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
@IBOutlet weak var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
webView.navigationDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let myURL = URL(string: "https://www.myurl.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
if let serverTrust = challenge.protectionSpace.serverTrust {
completionHandler(.useCredential, URLCredential(trust: serverTrust))
}
}
}