Как я могу сделать какие-либо ссылки в веб-обзоре на сафари в Xcode?

У меня есть веб-просмотр в моем приложении, и я хотел бы, чтобы любые ссылки в веб-представлении открывались в сафари вместо самого веб-представления.

Я кодирую приложение в swift и видел несколько ответов для objective-c, но ни один из них для быстрого.

Кто-нибудь знает, как я могу это сделать?

Ответ 1

Это делается по-разному в Swift, как в Obj-C:

Сначала объявите, что ваш контроллер просмотра соответствует UIWebViewDelegate

class MyViewController: UIWebViewDelegate

Затем реализуем webViewShouldStartLoadingWithRequest:navigationType: в вашем контроллере просмотра:

// Swift 1 & 2
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    switch navigationType {
    case .LinkClicked:
        // Open links in Safari
        UIApplication.sharedApplication().openURL(request.URL)
        return false
    default:
        // Handle other navigation types...
        return true
    }
}

// Swift 3
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    switch navigationType {
    case .linkClicked:
        // Open links in Safari
        guard let url = request.url else { return true }

        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            // openURL(_:) is deprecated in iOS 10+.
            UIApplication.shared.openURL(url)
        }
        return false
    default:
        // Handle other navigation types...
        return true
    }
}

Наконец, установите делегат UIWebView, например, в viewDidLoad или в вашей раскадровке:

webView.delegate = self

Ответ 2

Обновлено для быстрого 3

func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == UIWebViewNavigationType.linkClicked {
        UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil)
        return false
    }
    return true
}

Ответ 3

Вам нужно реализовать метод webViewShouldStartLoadingWithRequest:navigationType в своем делете веб-просмотра и найти ссылки, которые вы хотите открыть в Safari. Если вы отправите их в ОС с помощью [[UIApplication sharedApplication]openURL:], они откроются в Safari.

Ответ 4

Обновлено для Swift 4.2

func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
    if navigationType == UIWebView.NavigationType.linkClicked {
        UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil)
        return false
    }
    return true
}