2014-12-13 3 views
4

Я пытаюсь разработать приложение iOS с интерфейсом UIWebView в Swift, однако мне нужно, чтобы он работал только с одним доменом, и любые внешние ссылки, на которые было нажато, чтобы открыть UIWebView в Сафари. (E.G. Все ссылки на http://example.com откроются в UIWebView, но в Safari откроется ссылка на http://twitter.com).Ограничить UIWebView конкретным URL-адресом (Swift)

Я нашел пару решений в Интернете, но единственная версия Swift (найденная здесь: UIWebView open links in Safari) работает, чтобы открыть каждую ссылку в Safari, я просто хочу, чтобы внешние ее делали.

Может ли кто-нибудь помочь? Спасибо.

+0

ответ вы связаны показывает основы решения - вам просто необходимо изучить хост в URL запроса, чтобы решить, если вы должен вернуть ДА или НЕТ и открыть URL-адрес в сафари – Paulw11

ответ

4

Должно быть, я лучше Swift, чем я думал ...

Модификация решение, которое я нашел первоначально (связанный в вопросе), я придумал эту альтернативу, которая позволяет через мой URL, но и открывает любой внешние URL-адреса в Safari.

func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool { 
    if navigationType == UIWebViewNavigationType.LinkClicked { 
     if (request.URL.host! == "example.com"){ 
      return true 
     } else { 
      UIApplication.sharedApplication().openURL(request.URL) 
      return false 
     } 
    } 
    return true 
} 

Не забудьте передать этот код с UIWebView в View Controller, и он должен работать нормально (только до тех пор, как вы замените example.com с URL.

Пожалуйста, оцените этот комментарий, как я провел весь день в поисках учебников и форумов, и думаю, что мое окончательное решение довольно чистое!

+1

Как вы делегируете его из UIWebview в контроллер просмотра. Я добавил этот код, но понятия не имею, как заставить мой веб-браузер называть его. Спасибо – user1318747

+0

@ user1318747 Я больше не делал Swift с этого поста, поэтому я забыл. Я считаю, что вы держите управление и перетащите свой UIWebView в свой файл ViewController.swift, находясь в помощнике редактора, и введите имя «webview», затем нажмите connect, и он должен сделать все остальное за вас. Надеюсь, вы нашли мой код полезным! – MattFiler

7

Как решение @ MattFlier является правильным, но не компилируется с использованием последнего компилятора Swift. Важно развернуть NSURLRequest URL, поэтому обновленное решение:

func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool { 
    if navigationType == UIWebViewNavigationType.LinkClicked { 
     if (request.URL!.host! == "example.com"){ 
      return true 
     } else { 
      UIApplication.sharedApplication().openURL(request.URL!) 
      return false 
     } 
    } 
    return true 
} 

И да, для этого вы можете управлять + Перетащить свой UIWebView в UIViewController, который представляет представление, а затем убедиться, что функция делегата названа так же, как и «IBOutlet weak var»,

What this looks like

You также необходимо убедиться, что ваш контроллер представления реализует UIWebViewDelegate

class OfferDetailViewController : UIViewController, UIWebViewDelegate 
{ 
    ... 

А потом в методе viewDidLoad() также необходимо назначить делегата следующим образом:

override func viewDidLoad() { 
    self.webView.delegate = self; 
} 
Смежные вопросы