对UIWebView的双击识别 - Swift 3
我试图在UIWebView上实现手势识别器来检测双击。但没有认可。对UIWebView的双击识别 - Swift 3
我已经浏览了几个教程的Web,我可以编译到这。下面的代码。但没有成功。
class PageContentViewController: UIViewController, UIGestureRecognizerDelegate, UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
var pageIndex: Int = 0
var strTitle: String!
var flag : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
webView.delegate = self
DispatchQueue.main.async {
let req = URLRequest(url: URL(fileURLWithPath: Bundle.main.path(forResource: self.strTitle+"/index" , ofType: "html")!))
self.webView.loadRequest(req)
self.view.addSubview(self.webView)
}
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(self.goToback))
tapGestureRecognizer.delegate? = self
tapGestureRecognizer.numberOfTapsRequired = 2
webView.isUserInteractionEnabled = true
webView.addGestureRecognizer(tapGestureRecognizer)
webView.scrollView.addGestureRecognizer(tapGestureRecognizer)
webView.gestureRecognizerShouldBegin(tapGestureRecognizer)
}
func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith:UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizer(_: UIGestureRecognizer, shouldReceive:UITouch) -> Bool {
return true
}
func goToback(){
print("On the Back")
}
}
什么是错误的代码?
我很喜欢快速。
在此先感谢
我想你会需要添加
webView.delegate = self
同时添加UIWebViewDelegate到类
编辑:
你shouldRecognizeSimultaneouslyWith和shouldReceive看起来有点怪异,也许复制粘贴错误?它应该看起来像:
func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith:UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizer(_: UIGestureRecognizer, shouldReceive:UITouch) -> Bool {
return true
}
编辑2:
我复制你的确切代码并删除gestureRecognizerShould开始和它的工作,我能除去一些其他的代码为好,如果你需要它在不知道你的项目,但这里是我什么工作:
class ViewController: UIViewController, UIGestureRecognizerDelegate, UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.delegate = self
DispatchQueue.main.async {
let req = URLRequest(url: URL(fileURLWithPath: Bundle.main.path(forResource: self.strTitle+"/index" , ofType: "html")!))
self.webView.loadRequest(req)
}
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(self.goToback))
tapGestureRecognizer.delegate = self
tapGestureRecognizer.numberOfTapsRequired = 2
webView.isUserInteractionEnabled = true
webView.addGestureRecognizer(tapGestureRecognizer)
}
func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith:UIGestureRecognizer) -> Bool {
return true
}
func goToback() {
print("On the Back")
}
我有一个双敲击手势在我的应用程序做的工作如下:
我创建UIWe的子类bView那就是UIGestureRecognizerDelegate
class MyWebView: UIWebView, UIGestureRecognizerDelegate {
func gestureRecognizer(_: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith:UIGestureRecognizer) -> Bool {
return true
}
func gestureRecognizer(_: UIGestureRecognizer, shouldReceive:UITouch) -> Bool {
return true
}
}
然后在我的视图控制器类我引用我的子类(确保它在Interface Builder中引用)
@IBOutlet weak var webView: MyWebView!
而且在viewDidLoad中添加识别
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(self.goToback))
tapGestureRecognizer.delegate? = self.webView //set the delegate to the custom UIWebView
tapGestureRecognizer.numberOfTapsRequired = 2
webView.isUserInteractionEnabled = true
webView.addGestureRecognizer(tapGestureRecognizer)
希望这有帮助,我的原始代码是在Objective-C代码中,所以不得不在这里做一个快速翻译,所以希望没有语法问题。
为什么你对webview
和webview.scrollview
使用相同的手势UIGestureRecognizer
。
相反,你需要创建两个这样的两个独立UIGestureRecognizer
...
// for webView
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(self.goToback))
tapGestureRecognizer.delegate? = self
tapGestureRecognizer.numberOfTapsRequired = 2
webView.isUserInteractionEnabled = true
webView.addGestureRecognizer(tapGestureRecognizer)
// for webView.scrollView
let tapGestureRecognizer1 = UITapGestureRecognizer(target:self, action:#selector(self.goToback))
tapGestureRecognizer1.delegate? = self
tapGestureRecognizer1.numberOfTapsRequired = 2
webView.scrollView.addGestureRecognizer(tapGestureRecognizer1)
如果您分配相同的手势识别两个对象,然后将对象的一个没有它...看到日志
我已经使用这个代码,它完美地
override func viewDidLoad() {
super.viewDidLoad()
let tapLockGesture = UITapGestureRecognizer(target: self, action: #selector(tapLock))
tapLockGesture.delegate = self
tapLockGesture.numberOfTapsRequired = 2
webView.addGestureRecognizer(tapLockGesture)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
对我的作品请务必遵守UIGestureRecognizerDelegate和UIScrollViewDelegate。
嘿@aryan你能介意添加UI层次结构的屏幕截图?或查看层次结构? – Prateekro
[这里](http://pasteboard.co/HnZ7qMEYo.png)你去 –
您面临的问题是什么? –
看到这个http://*.com/questions/2909807/does-uigesturerecognizer-work-on-a-uiwebview –
@RichardG我想在UIWebView doubletap改变视图控制器。但UIWebView不会检测到任何轻击手势。 – Prateekro