对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") 
} 

} 

This picture contains webview in orange Attribute Inspector for UIWebView

什么是错误的代码?

我很喜欢快速。

在此先感谢

+0

您面临的问题是什么? –

+0

看到这个http://*.com/questions/2909807/does-uigesturerecognizer-work-on-a-uiwebview –

+0

@RichardG我想在UIWebView doubletap改变视图控制器。但UIWebView不会检测到任何轻击手势。 – Prateekro

我想你会需要添加

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") 
} 
+0

嘿@Casper Zandbergen加入代表并分配给自己。但仍然是问题仍然 – Prateekro

+0

嗯不知道为什么这wouldnt工作,但我检查了一个旧的项目,我做的方式是添加到webView的scrollView:'webView.scrollView.addGestureRecognizer(手势)'的GestureRecognizer'我也设置了scrollview委托给自己 –

+0

您可以介意检查Interface Builder是否需要进行一些更改。 – Prateekro

我有一个双敲击手势在我的应用程序做的工作如下:

我创建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代码中,所以不得不在这里做一个快速翻译,所以希望没有语法问题。

为什么你对webviewwebview.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) 

如果您分配相同的手势识别两个对象,然后将对象的一个​​没有它...看到日志

enter image description here

我已经使用这个代码,它完美地

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 
} 

对我的作品请务必遵守UIGestureRecognizerDelegateUIScrollViewDelegate

+0

嘿@aryan你能介意添加UI层次结构的屏幕截图?或查看层次结构? – Prateekro

+0

[这里](http://pasteboard.co/HnZ7qMEYo.png)你去 –