Как открыть контроллер Safari View из Webview (swift)
У меня есть приложение, которое в настоящее время использует webview, и когда в webview нажимаются определенные ссылки, он открывает эти ссылки в Safari. Теперь я хочу реализовать контроллер Safari View Controller (SVC) вместо загрузки его в приложение Safari. Я провел исследование и посмотрел примеры на SVC; однако все, что я вижу, - это те, которые открывают SVC одним нажатием кнопки. У кого-нибудь есть предложения для меня посмотреть или попробовать?
вот некоторые из моих код:
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)
}
5 ответов
Если я правильно понимаю, вы загружаете страницу в webview, которая теперь имеет определенные ссылки, когда пользователь нажимает на ссылку, которую вы хотите открыть в SVC. Вы можете обнаружить щелчок ссылки в webview, используя следующий метод делегата, а затем открыть SVC оттуда.
редактировать
на основе отредактированного вопроса я вижу , что вы не вызываете showlinksclicked func, вы можете вызвать эту функцию, как я обновил в следующем коде, и она должна работать.
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)
}
Для Swift 3:
сначала импортируйте SafariServices и интегрируйте делегат в свой класс:
import SafariServices
class YourViewController: SFSafariViewControllerDelegate {
затем, чтобы открыть Safari с указанным url:
let url = URL(string: "http://www,google.com")!
let controller = SFSafariViewController(url: url)
self.present(controller, animated: true, completion: nil)
controller.delegate = self
и теперь вы можете реализовать обратный вызов делегата, чтобы уволить safari, когда пользователь закончит:
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
controller.dismiss(animated: true, completion: nil)
}
этот кусок кода позволит вам сделать это.
let safariVC = SFSafariViewController(URL: NSURL(string: "https://www.google.co.uk")!)
self.presentViewController(safariVC, animated: true, completion: nil)
safariVC.delegate = self
возможно, Вам также потребуется добавить это в начало класса:
import SafariServices
выполните действия :
в файле контроллера(например, ViewController.swift) импорт SafarriServices.
import SafariServices
тогда, где вы хотите открыть ссылку, напишите
let controller = SFSafariViewController(URL: NSURL(string: "https://www.google.co.uk")!)
self.presentViewController(controller, animated: true, completion: nil)
controller = self
Решение Для Swift 4
Шаг 1:
импорт службы Safari в вашем классе
import SafariServices
Шаг 2:
импорт SFSafariViewControllerDelegate в с контроллером вида
class ViewController: UIViewController,SFSafariViewControllerDelegate {...}
Шаг 3:
создайте функцию для открытия контроллера вида Safari.
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)
}
Шаг 4:
звоните функция openSafariVC
openSafariVC()
Примечание: Не забудьте добавить навигационный контроллер с вашим видом Контроллер.
теперь ваш SafariVC готов открыть ссылку в приложении без использования UIWebView Oe WKWebView