J'ai une application qui utilise actuellement une View WebView et lorsque certains liens sont cliqués dans la vision WebView, il ouvre ces liens dans Safari. Je souhaite maintenant mettre en œuvre le contrôleur de la vue Safari (SVC) au lieu de le démarrer à l'application Safari. J'ai fait des recherches et j'ai examiné des exemples sur le SVC; Cependant, tout ce que je vois sont ceux qui ouvrent le SVC à partir du clic d'un bouton. Est-ce que quelqu'un a des suggestions pour moi de regarder ou d'essayer?
Voici une partie de mon code: p>
7 Réponses :
Ce morceau de code vous permettra de le faire.
import SafariServices
Devrait-il simplement être ajouté à mon code actuel? Ou puis-je le mettre là-bas au lieu d'une partie de mon code? Si je viens de l'ajouter là-bas, rien de différent n'arrive
Vous devrez le mettre dans votre fonction ViewDidLoad ou ViewWillappear. Dans mon application, cela est joint à un bouton de sorte que lorsque vous cliquez dessus, la page apparaît dans Safari.
OK, voyez que je n'ai pas de bouton qu'il est lié. Je veux que cela opeine le SVC lorsque certains liens de l'application sont cliqués. (ex: Contactez-nous, à propos de nous, etc.) Mon webview appelle un site Web avec ces liens, donc je n'ai aucun contrôle du code initial du site Web.
Si je comprends correctement, vous chargez une page sur webview qui dispose de certains liens maintenant lorsque l'utilisateur clique sur le lien que vous souhaitez ouvrir ces pages dans SVC. Vous pouvez détecter la liaison Cliquez dans WebView en utilisant la méthode de déléguée suivante, puis ouvrez SVC à partir de là.
Modifier P>
basé sur la question modifiée, je peux voir que vous n'appelez pas showLinksClicked Func, vous pouvez appeler cette fonction comme J'ai mis à jour le code suivant et cela devrait fonctionner. P>
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: URL(string: "www.google.com")!) present(safariVC, animated: true, completion: nil) safariVC.delegate = self } func safariViewControllerDidFinish(controller: SFSafariViewController) { controller.dismissViewControllerAnimated(true, completion: nil) }
J'utilise le code similaire à cela, et ça marche. Cependant, il ouvre les liens cliqués dans l'application Safari actuelle, où je veux simplement ouvrir un contrôleur de vue Safari à l'intérieur de ma propre application. @Bhumit Mehta
@beginnerCoder Pouvez-vous modifier votre question avec le code que vous utilisez?
@beginnerCoder J'ai mis à jour ma réponse, vous avez créé la fonction mais n'appeliez pas cela.
Cela ouvre toujours le lien cliqué dans la vision WebView, et non le SVC comme je le souhaite. @Bhumit Mehta
@beginnerCoder J'ai supprimé l'état de domaine de la méthode des délégués, je pense que ce n'était pas satisfait, pouvez-vous vérifier maintenant?
Suivez les étapes:
sur votre fichier de contrôleur (E.G. ViewController.swift) Import Safarriservices. p> alors où vous souhaitez ouvrir la liaison écrire écrire p>
Pour Swift 3:
Premièrement, importer des safarservices et intégrer le délégué à votre classe: P> puis, pour ouvrir safari avec l'URL spécifiée: P > func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
controller.dismiss(animated: true, completion: nil)
}
Solution pour Swift 4 Strong> P>
Étape 1: strong> p> Importez le service Safari en votre classe P>
openSafariVC()
Y a-t-il une manière là où je peux directement ouvrir SFSAFARIVIEWCONTROLLER, donc je n'ai pas à appeler OpenSafarivc ()? Pour l'instant j'utilise faire ceci> coller.ubuntu.com/p/rgmfqr76dv mais je Vous voulez seulement utiliser SFSAFARIVIEWCONTROLLER.
@Shahidghafoor sfsafariviewcontroller est destiné à ouvrir n'importe quel événement de clic, vous pouvez ouvrir une page Web à l'intérieur ViewController avec WKWebView, donc pas besoin de rediriger de VC à SFVC.
Swift 4.2 strong> C'est ainsi que vous pouvez ouvrir un navigateur de safari dans votre application. P> extension YourViewController: SFSafariViewControllerDelegate
{
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
controller.dismiss(animated: true, completion: nil)
}
}
import SafariServices class ViewController: UIViewController, SFSafariViewControllerDelegate { override func viewDidLoad() { super.viewDidLoad() DispatchQueue.main.asyncAfter(deadline: .now() + 3) { let url = URL(string: "http://www.google.com")! let controller = SFSafariViewController(url: url) self.present(controller, animated: true, completion: nil) controller.delegate = self } } func safariViewControllerDidFinish(_ controller: SFSafariViewController) { dismiss(animated: true) } }