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)
}
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)
}
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)
}
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
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
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