带触摸事件的WebView UITapGestureRecognizer无法识别的选择器

时间:2017-07-12 10:34:57

标签: ios swift swift3

运行我的代码时总会发生此错误。你能告诉我问题出在哪里以及如何在Swift 3中修复它?

错误:

  

[UIWebView tapAction:]:无法识别的选择器发送到实例   0x7f9bfbf14e60

代码:

class ViewController: UIViewController, UITextFieldDelegate, UIGestureRecognizerDelegate {

    @IBOutlet var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.  
        let url = URL(string: "http://www.pdf995.com/samples/pdf.pdf")!
        webView.loadRequest(URLRequest(url: url))

        let webViewTapped = UITapGestureRecognizer(target: webView, action: #selector(self.tapAction(_:)))
        webViewTapped.numberOfTouchesRequired = 1
        webViewTapped.delegate = self
        webView.addGestureRecognizer(webViewTapped)
   }

   func tapAction(_ sender: UITapGestureRecognizer) {
       let point = sender.location(in: self.view)
       print("123")
       print(point.x)
       print(point.y)
   }

3 个答案:

答案 0 :(得分:4)

webView更改目标:

let webViewTapped = UITapGestureRecognizer(target: webView, action: #selector(self.tapAction(_:)))

self

let webViewTapped = UITapGestureRecognizer(target: self, action: #selector(self.tapAction(_:)))

答案 1 :(得分:2)

将您的代码替换为

    let webViewTapped = UITapGestureRecognizer(target: self, action: #selector(self.tapAction(_:)))

答案 2 :(得分:1)

目标和行动用于指代特定的方法/行动。在您的情况下,您正在创建UITapGestureRecognizer。 UITapGestureRecognizer需要知道要调用的操作。

目标是动作消息的接收者。一个控件,或者更常见的是,它的单元格将其动作消息的目标作为一个出口(参见奥特莱斯)。目标通常是您的一个自定义类的实例,尽管它可以是任何Cocoa对象,其类实现适当的操作方法。

操作是控件发送给目标的消息,或者从目标的角度来看,目标实现的方法以响应操作消息。

正如@AnbuKarthik所建议的那样,使用目标作为自己在这里,self是动作消息的接收者,而不是webview。有关Target-Action的更多信息,请查看此link

let webViewTapped = UITapGestureRecognizer(target: self, action: #selector(self.tapAction(_:)))