Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 双击输入手势识别器_Ios_Objective C_Iphone_Swift - Fatal编程技术网

Ios 双击输入手势识别器

Ios 双击输入手势识别器,ios,objective-c,iphone,swift,Ios,Objective C,Iphone,Swift,我的项目有一个自定义的uitableviewCell,里面有一个图像滑块。基本上是一个带有分页图像的滚动视图 我需要点击并双击这个ImageSlider来执行一些操作。单抽头工作正常,但双抽头选择器未触发 override func awakeFromNib() { super.awakeFromNib() let singleTap = UITapGestureRecognizer(target: self, action: #selector(singleTap(_:)))

我的项目有一个自定义的uitableviewCell,里面有一个图像滑块。基本上是一个带有分页图像的滚动视图

我需要点击并双击这个ImageSlider来执行一些操作。单抽头工作正常,但双抽头选择器未触发

override func awakeFromNib() {
    super.awakeFromNib()

    let singleTap = UITapGestureRecognizer(target: self, action: #selector(singleTap(_:)))
    singleTap.numberOfTapsRequired = 1
    singleTap.cancelsTouchesInView = false
    slideShowView.addGestureRecognizer(singleTap)


    //Double tap recognizer
    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doubleTap(_:)))
    doubleTap.cancelsTouchesInView = false
    doubleTap.numberOfTapsRequired = 2

    slideShowView.addGestureRecognizer(doubleTap)

    singleTap.require(toFail: doubleTap)

    print("slideshow recognizers",slideShowView.gestureRecognizers!) }         


func doubleTap(_ sender : UITapGestureRecognizer) {

     print("doubletap")        
}

 func singleTap(_ sender : UITapGestureRecognizer) {

     print("singleTap")
}
问候

编辑:你可以在这里看到我的日志,我也更改了我原来的帖子

 slideshow recognizers [<UITapGestureRecognizer: 0x17ec1670; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=singleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>; must-fail = {
    <UITapGestureRecognizer: 0x17e763b0; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=doubleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>; numberOfTapsRequired = 2>
}>, <UITapGestureRecognizer: 0x17e763b0; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=doubleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>; numberOfTapsRequired = 2; must-fail-for = {
    <UITapGestureRecognizer: 0x17ec1670; state = Possible; view = <ImageSlideshow.ImageSlideshow 0x17ec0e30>; target= <(action=singleTap:, target=<Descubra.FeedDefaultCell 0x183cf800>)>>
}>]

singleTap

要使单键和双击手势协同工作,系统在看到单键时需要知道它是单键还是双键的前半部分。它必须了解未来,这将是一个非常有价值的功能,或者它必须等待,看看接下来会发生什么。让它等着瞧

singleTap.requireGestureRecognizerToFail(doubleTap)

要使单键和双击手势协同工作,系统在看到单键时需要知道它是单键还是双键的前半部分。它必须了解未来,这将是一个非常有价值的功能,或者它必须等待,看看接下来会发生什么。让它等着瞧

singleTap.requireGestureRecognizerToFail(doubleTap)

谢谢回复,但正如您在我的代码中看到的,我已经尝试过了,它的注释是//singleTap.requiretoFail:doubleTap swift 3版本。事实并非如此work@pneves-对不起。没有听到评论。嗯。你能把cancelsTouchesInView=false都去掉吗?还是你也试过了?@pneves-手势代码看起来很正确,所以我想知道是不是更微妙的东西。这是一个tableview单元格子类,对吗?在表视图中注册时,您是使用registerClass:还是registerInB:呢?在任何一种情况下,您都可能应该为该代码使用指定的初始值设定项initWithStyle for registerClass或initWithCoder for RegisterInB。我想在使用registerClass时不会调用awakeFromNib。如果你看到没有触摸行为,我会对所有这些更有信心。是的,它是tableview单元格的子类。我在代理控制器self.tableView.registerUnib.initnibName:FeedDefaultCell,bundle:nil,forCellReuseIdentifier:kDefaultCellID中注册nib。singleTap方法正在被调用,所以我认为它没有任何问题,只是在posted方法中,在添加gr后,将slideShowView.gestureRecognizers记录下来。这是您所期望的吗?谢谢您的回复,但正如您在我的代码中看到的,我已经尝试过了,它的注释//singleTap.requiretoFail:doubleTap swift 3版本。事实并非如此work@pneves-对不起。没有听到评论。嗯。你能把cancelsTouchesInView=false都去掉吗?还是你也试过了?@pneves-手势代码看起来很正确,所以我想知道是不是更微妙的东西。这是一个tableview单元格子类,对吗?在表视图中注册时,您是使用registerClass:还是registerInB:呢?在任何一种情况下,您都可能应该为该代码使用指定的初始值设定项initWithStyle for registerClass或initWithCoder for RegisterInB。我想在使用registerClass时不会调用awakeFromNib。如果你看到没有触摸行为,我会对所有这些更有信心。是的,它是tableview单元格的子类。我在代理控制器self.tableView.registerUnib.initnibName:FeedDefaultCell,bundle:nil,forCellReuseIdentifier:kDefaultCellID中注册nib。singleTap方法正在被调用,所以我认为它没有任何问题,只是在posted方法中,在添加gr后,将slideShowView.gestureRecognizers记录下来。这是你期望的吗?如果你在同一个视图上使用两个手势,则必须使用requireToFail。另外,请确保您的视图中的userinteractionenabled=YES,并且tableview DidSelect中没有防止触发双击的方法。@Skeek它的userinteractionenabled=true,否则我无法在幻灯片中滑动图片,而singletap正在工作,因为我在另一个视图中打开每一张图片。很抱歉,我错过了你使用UIScrollView的部分。如果您在将来的问题中编写UIScrollView,人们会忽略细节,这会容易得多。似乎ScrollView有自己的双击方法,这就是为什么它无法使用自定义方法。尝试在scrollview上设置delaysContentTouches=NO,然后告诉我这是否解决了您的问题。否则,现在你知道了这个问题,你可以用谷歌搜索一个更简单的解决方案。G如果在同一视图上使用两个手势,则必须复制requireToFail。另外,请确保您的视图中的userinteractionenabled=YES,并且tableview DidSelect中没有防止触发双击的方法。@Skeek它的userinteractionenabled=true,否则我无法在幻灯片中滑动图片,而singletap正在工作,因为我在另一个视图中打开每一张图片。很抱歉,我错过了你使用UIScrollView的部分。如果您在将来的问题中编写UIScrollView,人们会忽略细节,这会容易得多。似乎ScrollView有自己的双击方法,这就是为什么它对您失败的原因 r定制的。尝试在scrollview上设置delaysContentTouches=NO,然后告诉我这是否解决了您的问题。否则,现在你知道了这个问题,你可以用谷歌搜索一个更简单的解决方案。可能重复的