运行我的代码时总会发生此错误。你能告诉我问题出在哪里以及如何在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)
}
答案 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(_:)))