2017-07-29 45 views
-1

我對Xcode 8學習Switf 3現在我被困在一個小應用程序,它基本上只是顯示了webView元素的網頁。我嘗試實現的唯一addtion函數是外部URL作爲共享應用程序(例如Safari)打開。迅速3 - declated功能不被調用

由於SO中有很多示例,我認爲我找到了使它工作的所有元素,但不知怎的,func webView檢查url沒有被調用。

這裏是我的代碼,形成ViewController.swif至今:

import UIKit 

class ViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet weak var webView: UIWebView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.webView.delegate = self; 
     let url = URL(string: "https://stackoverflow.com") 
     debugPrint(url!) 
     webView.loadRequest(URLRequest(url: url!)) 
    } 

    // [...] 

    func webView(webView: UIWebView!, shouldStartLoadWithRequest request: URLRequest!, navigationType: UIWebViewNavigationType) -> Bool { 
     debugPrint("func webView has been called") 
     debugPrint(request.url!) 
     if navigationType == UIWebViewNavigationType.linkClicked { 
      if (request.url!.host! == "stackoverflow.com"){ 
       return true 
      } else { 
       //UIApplication.sharedApplication().openURL(request.URL!) 
       UIApplication.shared.open(request.url!) 
       return false 
      } 
     } 
     return true 
    } 
} 

哪裏是我的後勤錯誤?

+0

您是否嘗試過在加載前設置'委託= self'請求? –

+0

是的,這就是我原來的地方......只是爲了測試我把它放下了。我會在這裏更正這個問題... – wittich

+0

**附加說明**檢查'request.url!.host!= nil'很重要,否則應用程序在沒有主機的情況下會遇到url request問題,例如'mailto'。 – wittich

回答

1

委託方法的斯威夫特3的簽名是錯誤的:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 
+0

就是這樣!非常感謝,作爲一個初學者,Swift 3的語法已經發生了很大的變化......這使得大多數代碼示例不再適用。 – wittich

+1

Swift 3中從Objective-C橋接並與視圖相關的委託方法在左括號後總是帶下劃線,而參數類型通常是非可選或常規可選('?') – vadian

1

試試這個

編輯

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
     debugPrint("func myWebView has been called") 
     debugPrint(request.url!) 
     if navigationType == UIWebViewNavigationType.linkClicked { 
      if (request.url!.host! == "stackoverflow.com"){ 
       return true 
      } else { 
       //UIApplication.sharedApplication().openURL(request.URL!) 
       UIApplication.shared.open(request.url!) 
       return false 
      } 
     } 
     return true 
    } 
+0

這個選項已經設置好了,它只允許非安全的內容,比如形式爲'http'的鏈接。那不是我要找的! – wittich

+0

查看我編輯的答案 –

+0

是的就是這樣!但[@vadian](https://stackoverflow.com/a/45389354/3001970)速度更快! – wittich