Xcode,Swift; 检测UIWebView中的超链接

5 xcode hyperlink uiwebview shouldstartload ios

我用Xcode和Swift制作了一个iOS应用程序.

我想在Safari浏览器中打开特定的超链接,在WebView本身中还有其他超链接.

为了实现这一点,我必须检查点击超链接的时间.

这是我到目前为止的代码:

//
//  PushViewController.swift
//  App
//
//

import UIKit
class PushViewController: UIViewController, UIWebViewDelegate {
    @IBOutlet var openpushmessage: UIWebView!

    var weburl:String = "http://www.example.com"

    override func viewDidLoad() {
        super.viewDidLoad()

        let url: NSURL = NSURL(string: weburl)!
        let requestURL: NSURLRequest = NSURLRequest(URL: url)
        openpushmessage.loadRequest(requestURL)
    }
    override func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if navigationType == .linkClicked
        {
            print("You clicked a hypelink!")
        }
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

代码viewDidLoad()打开从我的服务器加载主URL(http://www.example.com).这很好.

override fun webView[…]应检测是否单击了超链接然后print("You clicked a hypelink!").

但不幸的是,我收到以下错误:

我的代码有一个错误和一个警告

我究竟做错了什么?如何摆脱这些错误?

Eme*_*ias 7

请试试

对于swift 3.0

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

            }
            return true;
        }
Run Code Online (Sandbox Code Playgroud)

迅捷2.2

internal func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool
    {
        if navigationType == .LinkClicked
        {

        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

这是有效的解决方案(Xcode 7.3.1和Swift 2.2):

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    if request.URL?.query?.rangeOfString("target=external") != nil {
        if let url = request.URL {
            UIApplication.sharedApplication().openURL(url)
            return false
        }
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)

非常感谢freelancer.com的danhhgl!