如何从Swift 3中的UIWebview中的链接打开另一个视图?

时间:2017-05-27 09:54:48

标签: ios swift3 uiwebview xcode8

当我实现完全适用于浏览器的代码时,在ios中打开safari并将myapp://放在地址栏上它打开我的应用程序,但我想要点击{{1}内的链接}

UIWebView

这是我将网站加载到webview并添加@IBOutlet weak var webView: UIWebView! override func viewDidLoad() { super.viewDidLoad() let setURL=URL(string:"https://myapp.com/") let setURLRequest=URLRequest(url:setURL!) webView.loadRequest(setURLRequest) }

的代码
URL TYPE >item0->myapp

当我添加链接例如item0->URL Scheme->myapp 时,它不会启动另一个视图获取错误

的appDelegate

< a href="myapp://"></a>

收到此错误'AppDelegate'类型的值没有成员'present'“

3 个答案:

答案 0 :(得分:1)

您可以使用UIWebView委托方法optional public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool

示例

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

    if request.url?.scheme == "myapp" {
        // do your work here
        UIApplication.shared.open(request.url, options: [:], completionHandler: nil)
    }
    return true
}

但你必须在你的app plist中提到所有的欲望方案..

enter image description here

使用网址方案打开其他应用

if let url = URL.init(string: "myapp://") {
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        print("scheme is missing in info.plist or invalid scheme")
    }
} else {
    print("invalid url")
}

答案 1 :(得分:1)

从内部 if block ,你需要返回false ,它应该有效。 通过返回false,委托方法告诉webView不应该开始加载URL。

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

if request.url?.scheme == "myapp" {
    // do your work here
    UIApplication.shared.open(request.url!, options: [:], completionHandler: nil)
    //Add the below line of code to the existing code
    return false
}
return true

}

答案 2 :(得分:0)

使用此代码(如果URL的最后一个字符包含“#”,它将起作用)。之所以添加“#”,是因为如果我们导航回到最后一个屏幕,它将无法打开。

在网络视图中链接(www.google.com)。

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, 
    navigationType: UIWebViewNavigationType) -> Bool {
    // request.url?.absoluteString = "www.google.com/#"
    let last = request.url?.absoluteString.last
    if last == "#" {
       //do stuff here
    }
    return true
}