Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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 UIPangestureRecognitor不转发触摸_Ios_Objective C_Uigesturerecognizer - Fatal编程技术网

Ios UIPangestureRecognitor不转发触摸

Ios UIPangestureRecognitor不转发触摸,ios,objective-c,uigesturerecognizer,Ios,Objective C,Uigesturerecognizer,我的UIViewController中有两个UICollectionView。在VCs视图的顶部,我有一个uigestureRecognitor 我希望UIGestureRecognizer启动,生成逻辑,并将对下划线视图的触摸转发到它们的对象(如滚动集合视图) 我已将uigesturecognizer的属性cancelsTouchesInView设置为NO。但这没用 这些都没有帮助: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture

我的
UIViewController
中有两个
UICollectionView
。在VCs视图的顶部,我有一个
uigestureRecognitor

我希望
UIGestureRecognizer
启动,生成逻辑,并将对下划线视图的触摸转发到它们的对象(如滚动集合视图)

我已将
uigesturecognizer
的属性cancelsTouchesInView设置为
NO
。但这没用

这些都没有帮助:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([gestureRecognizer isMemberOfClass:[UIPanGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}

首先,
UIGestureRecognitor
是一个抽象基类。您必须指定它的一个子类以供使用:
UITapGestureRecognizer
。 接下来,您必须设置其委托,并使用GestureRecognitizer委托方法同时从
shouldRecognitize返回
YES
。 我认为这样应该行得通


但是让我问你一个问题:为什么你不首先使用集合视图委托方法
didSelectItem:atIndexPath

大约两年前,我遇到了一个类似于你的问题,但我的问题是MKMapView而不是UICollectionView,但我相信我们可以解决它

您是否检查过,可能是因为UICollectionView正在使用触摸,而您的手势从未到达,所以您没有收到代理消息

  • 尝试将您的手势附加到UICollectionVIew上,而不是VCs的视图上
它应该可以工作,但如果不行,请尝试删除UICollection以进行测试,将该手势附加到VC的视图上,然后点击该视图以确保该手势正常工作

  • 如果即使没有视图层次结构上的UICollectionView,UI手势也无法工作,则说明您没有正确初始化它
好的,如果在VC的视图上附加手势时调用了代理,但在UICollectionView上附加手势时没有调用代理,我很确定您的手势和UICollectionView的手势之间存在一些手势冲突

  • 在这种情况下,循环UICollectionView的手势,并要求手势做出失败响应。以这个片段为例:

    for (UIGestureRecognizer *gesture in collectionView.gestureRecognizers) {
    
        [gesture requireGestureRecognizerToFail:yourGesture];
    }
    
或者

对UIView进行子类化,将其放置在视图控制器的最顶部,UICollectionView的上方,然后覆盖

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
方法,在其中执行操作,然后返回nil以将触摸传递到上面的视图

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    //Do your stuff here ... you can also
    //return self; if you want to consume the touch

    //You can make this UIView's subclasse a "TouchDetector layer"
    //and call a delegate from here to notify other classes that 
    //this view is been touched...

    //returning nil, the touch will not be blocked and will be reached
    //by the view above it.
    return nil; 
}

我希望上面的一个能解决你的问题。或者至少是正确的方法…

这不起作用:-(BOOL)GestureRecognitzer:(UIGestureRecognitzer*)GestureRecognitzer应该需要AlbyGestureRecognitzer:(UIGestureRecognitzer*)其他GestureRecognitzer{if([GestureRecognitzer isMemberOfClass:[UIPangestureRecognitzer class]]){返回是;}返回否;}关于第二个问题,didSelectItem:atIndexPath没有回答我的问题needs@Luda:请提供有关您的问题的更多信息。这太模糊了。所以你说的是一个UIPangestureRecognitor和一个UICollectionView,它们应该同时响应触摸?此外,我没有说要实现其他委托方法……您告诉了我们期望的内容和您已经做了什么。还请指定实际(当前)行为。到底发生了什么?是否执行了
gestureRecognizer
方法,但未转发到基础视图?或者
手势识别器
方法本身没有被调用,但是底层视图得到了触动?或者两者都没有发生。