web-dev-qa-db-fra.com

Comment ouvrir Safari View Controller depuis une vue Web (Swift)

J'ai une application qui utilise actuellement une vue Web et lorsque certains liens sont cliqués dans la vue Web, elle ouvre ces liens dans Safari. Je souhaite maintenant implémenter le SVC (Safari View Controller) au lieu de l'initialiser sur l'application Safari. J'ai fait des recherches et regardé des exemples sur le SVC; Cependant, tout ce que je vois, ce sont ceux qui ouvrent le SVC en un clic. Quelqu'un a-t-il des suggestions que je puisse regarder ou essayer?

Voici un extrait de mon code:

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

Si je comprends bien, vous chargez une page sur la visualisation Web qui contient certains liens dès que l'utilisateur clique sur le lien pour lequel vous souhaitez ouvrir cette page dans SVC. Vous pouvez détecter un clic sur un lien dans une vue Web à l'aide de la méthode de délégation suivante, puis ouvrir SVC à partir de là.

MODIFIER

Sur la base de la question modifiée, je peux voir que vous n’appelez pas showLinksClicked func, vous pouvez appeler cette fonction comme je l’ai mise à jour dans le code suivant et cela devrait fonctionner.

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

Pour Swift 3:

Tout d’abord, importez SafariServices et intégrez le délégué dans votre classe:

import SafariServices

class YourViewController: SFSafariViewControllerDelegate {

Ensuite, pour ouvrir Safari avec l’URL spécifiée:

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

Et maintenant, vous pouvez implémenter le rappel du délégué pour renvoyer Safari lorsque l'utilisateur a terminé:

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

Ce morceau de code vous permettra de le faire.

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

Vous devrez peut-être également ajouter ceci au sommet de la classe:

import SafariServices
6
onemillion

Suis les étapes :

Sur votre fichier de contrôleur (ViewController.Swift, par exemple), importez SafarriServices. 

import SafariServices

Ensuite, où vous voulez ouvrir le lien écrire 

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

Solution pour Swift 4

Étape 1:  

importer le service Safari In you Class

import SafariServices

Étape 2:  

Importez SFSafariViewControllerDelegate dans avec votre contrôleur View

class ViewController: UIViewController,SFSafariViewControllerDelegate {...}

Étape 3:  

Créer une fonction pour ouvrir 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)
        }

Étape 4:  

appelez la fonction openSafariVC

openSafariVC()

Remarque: N'oubliez pas d'ajouter un contrôleur de navigation avec votre vue Manette.

Maintenant, votre SafariVC est prêt à ouvrir votre lien dans une application sans utiliser UIWebView Oe WKWebView

1
Anup Gupta