web-dev-qa-db-de.com

So öffnen Sie Safari View Controller von einer Webansicht aus (Swift)

Ich habe eine App, die derzeit eine Webansicht verwendet. Wenn bestimmte Links in der Webansicht angeklickt werden, werden diese Links in Safari geöffnet. Ich möchte jetzt den Safari View Controller (SVC) implementieren, anstatt ihn mit der Safari-App zu starten. Ich habe recherchiert und mir Beispiele des SVC angesehen. Ich sehe jedoch nur solche, die den SVC mit einem Klick öffnen. Hat jemand irgendwelche Vorschläge für mich zum Anschauen oder Ausprobieren?

Hier ist ein Teil meines Codes:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == UIWebViewNavigationType.LinkClicked {
        let Host = request.URL!.Host!;
        if (Host != "www.example.com"){
            return true
        } else {
            UIApplication.sharedApplication().openURL(request.URL!)
            return false
        }
    return true

}

func showLinksClicked() {

    let safariVC = SFSafariViewController(URL: NSURL(string: "www.example.com")!)
    self.presentViewController(safariVC, animated: true, completion: nil)
    safariVC.delegate = self    }

func safariViewControllerDidFinish(controller: SFSafariViewController) {
    controller.dismissViewControllerAnimated(true, completion: nil)
}
8
beginnercoder

Wenn ich das richtig verstehe, laden Sie eine Seite in webview, die jetzt bestimmte Links enthält, wenn der Benutzer auf den Link klickt, den Sie in SVC öffnen möchten. Sie können den Link-Klick in der Webansicht mithilfe der folgenden Delegat-Methode erkennen und SVC von dort aus öffnen.

BEARBEITEN

Basierend auf der bearbeiteten Frage kann ich sehen, dass Sie showLinksClicked func nicht aufrufen. Sie können diese Funktion aufrufen, da ich im folgenden Code aktualisiert habe und dies funktionieren sollte.

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == UIWebViewNavigationType.LinkClicked {
       self.showLinksClicked()
       return false

    }
    return true;
}


func showLinksClicked() {

    let safariVC = SFSafariViewController(URL: NSURL(string: "www.example.com")!)
    self.presentViewController(safariVC, animated: true, completion: nil)
    safariVC.delegate = self
}

func safariViewControllerDidFinish(controller: SFSafariViewController) {
    controller.dismissViewControllerAnimated(true, completion: nil)
}
13
Bhumit Mehta

Für Swift 3:

Importieren Sie zunächst SafariServices und integrieren Sie den Delegierten in Ihre Klasse:

import SafariServices

class YourViewController: SFSafariViewControllerDelegate {

Dann öffnen Sie Safari mit der angegebenen URL:

let url = URL(string: "http://www,google.com")!
let controller = SFSafariViewController(url: url)
self.present(controller, animated: true, completion: nil)
controller.delegate = self

Und jetzt können Sie den Delegatenrückruf implementieren, um die Safari zu beenden, wenn der Benutzer fertig ist:

func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
    controller.dismiss(animated: true, completion: nil)
}
12
vikzilla

Mit diesem Code können Sie dies tun.

let safariVC = SFSafariViewController(URL: NSURL(string: "https://www.google.co.uk")!)
self.presentViewController(safariVC, animated: true, completion: nil)
safariVC.delegate = self

Möglicherweise müssen Sie dies auch an der Spitze der Klasse hinzufügen:

import SafariServices
6
onemillion

Folge den Schritten :

Importieren Sie SafarriServices in Ihre Controller-Datei (z. B. ViewController.Swift). 

import SafariServices

Dann wo Sie Link schreiben möchten 

let controller = SFSafariViewController(URL: NSURL(string: "https://www.google.co.uk")!)
self.presentViewController(controller, animated: true, completion: nil)
controller = self
2
Dipen Patel

Lösung für Swift 4

Schritt 1: 

safari-Service in Ihrer Klasse importieren

import SafariServices

Schritt 2: 

Importieren Sie SFSafariViewControllerDelegate mit Ihrem View Controller

class ViewController: UIViewController,SFSafariViewControllerDelegate {...}

Schritt 3: 

Erstellen Sie eine Funktion zum Öffnen von Safari View Controller.

 func openSafariVC() {

            let safariVC = SFSafariViewController(url: NSURL(string: "https://www.google.com")! as URL)
            self.present(safariVC, animated: true, completion: nil)
            safariVC.delegate = self
        }

        func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
            controller.dismiss(animated: true, completion: nil)
        }

Schritt 4: 

rufen Sie die Funktion openSafariVC auf

openSafariVC()

Hinweis: Vergessen Sie nicht, mit Ihrer Ansicht einen Navigations-Controller hinzuzufügen Regler.

Jetzt ist Ihre SafariVC bereit, Ihren Link in einer App zu öffnen, ohne UIWebView Oe WKWebView zu verwenden.

1
Anup Gupta