Dies ist im Wesentlichen auf die gleiche Weise in Swift wie in Obj-C getan:
Zuerst erklären, dass Ihr View-Controller UIWebViewDelegate
class MyViewController: UIWebViewDelegate
Dann implementieren webViewShouldStartLoadingWithRequest:navigationType:
in Ihrem View-Controller entspricht:
// Swift 1 & 2
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
switch navigationType {
case .LinkClicked:
// Open links in Safari
UIApplication.sharedApplication().openURL(request.URL)
return false
default:
// Handle other navigation types...
return true
}
}
// Swift 3
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
switch navigationType {
case .linkClicked:
// Open links in Safari
guard let url = request.url else { return true }
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// openURL(_:) is deprecated in iOS 10+.
UIApplication.shared.openURL(url)
}
return false
default:
// Handle other navigation types...
return true
}
}
Schließlich, setzen Sie Ihre UIWebView
Delegate, zB in viewDidLoad
oder in Ihrem Sto ryboard:
webView.delegate = self
Ok aktualisiert. Das einzige bisschen verstehe ich nicht die 'Klasse MyViewController: UIWebViewDelegate'. Was mache ich damit? Danke. – crossboy007
In Swift können Sie deklarieren, dass Ihre Klasse einem Protokoll entspricht, indem Sie den Protokollnamen nach dem Klassennamen hinzufügen ([siehe Dokumentation] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/ Swift_Programming_Language/Protocols.html # // Apple_ref/doc/uid/TP40014097-CH25-ID267)). In Ihrem Fall wird es wahrscheinlich so etwas wie 'Klasse MyViewController aussehen: UIViewController, UIWebViewDelegate {... Zeug in der Klasse ...}' –
Dank @RonaldMartin, Es funktioniert wie Charme, vielen Dank –