2016-01-12 4 views
2

У меня есть UIWebView, который загружает локальный файл index.html.Открыть специальную ссылку в Safari от UIWebView

Однако у меня есть внешняя ссылка в этом html-файле, который я хотел бы открыть в Safari вместо внутреннего в UIWebView.

Открытие ссылки в сафари от, скажем, UIButton был достаточно прост:

UIApplication.sharedApplication().openURL(NSURL(string: "http://www.stackoverflow.com")) 

Открытие приложения Instagram из внешней ссылки также работает как шарм.

<a href="instagram://media?id=434784289393782000_15903882">instagram://media?id=434784289393782000_15903882</a> 

Так мой первый, хотя должен был сделать что-то вроде этого:

<a href="safari://stackoverflow.com">Open in Safari</a> 

Однако это не похоже на работу, то я читал что-то об использовании webView:shouldStartLoadWithRequest:navigationType:

Но каждый, кто сумел открыть внешнюю ссылку в Safari, пишет в Obj-C, с которой я не слишком хорошо знаком, когда пишу в Swift.

Обновление с Swift Code:

import UIKit 

class AccessoriesViewController: UIViewController, UIWebViewDelegate { 


    @IBOutlet weak var webView:UIWebView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     if let url = NSBundle.mainBundle().URLForResource("accessories", withExtension: "html") { 
      webView.loadRequest(NSURLRequest(URL: url)) 
     } 



    } 
    override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return UIStatusBarStyle.LightContent; 
    } 

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
     if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked { 
      UIApplication.sharedApplication().openURL(url) 
      return false 
     } 
     return true 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

ответ

2

Вот как вы можете это сделать!

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
     if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked { 
      UIApplication.sharedApplication().openURL(url) 
      return false 
     } 
     return true 
    } 
+0

Хм что-то еще кажется неправильным. Я добавил свой быстрый код, включая вашу функцию. Вы бы так любезны взглянуть на то, что не так? Поистине ценим! – Kevin

+0

Вы дали делегат 'UIWebView'? –

+1

Ах, конечно! Спасибо, сэр! – Kevin

Смежные вопросы