2015-02-18 3 views

Antwort

36

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 
+0

Ok aktualisiert. Das einzige bisschen verstehe ich nicht die 'Klasse MyViewController: UIWebViewDelegate'. Was mache ich damit? Danke. – crossboy007

+1

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 ...}' –

+0

Dank @RonaldMartin, Es funktioniert wie Charme, vielen Dank –

3

Sie müssen die Methode webViewShouldStartLoadingWithRequest:navigationType in Ihrem Web-View-Delegaten implementieren und nach den Links suchen, die Sie in Safari öffnen möchten. Wenn Sie diese mit [[UIApplication sharedApplication]openURL:] an das Betriebssystem senden, werden sie in Safari geöffnet.

6

für eine schnelle 3

func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if navigationType == UIWebViewNavigationType.linkClicked { 
     UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil) 
     return false 
    } 
    return true 
} 
Verwandte Themen