如果在目标 c 中使用手势,didSelectItemAtIndexPath 不起作用

Posted

技术标签:

【中文标题】如果在目标 c 中使用手势,didSelectItemAtIndexPath 不起作用【英文标题】:didSelectItemAtIndexPath not working if using gesture in objective c 【发布时间】:2018-08-02 06:30:39 【问题描述】:

我有一个 UIView A,我在 A 中添加了一个 UICollectionView B 作为 subView,所以现在视图 A 是 B 的背景视图。这时候 didSelectItemAtIndexPath 会被正常调用。但是,如果我向视图 A 添加轻击手势识别器,则不会调用 didSelectItemAtIndexPath。

【问题讨论】:

shouldReceiveTouch on UITableViewCellContentView的可能重复 【参考方案1】:

您要检查的几件事:

    没有self.collectionView.allowsSelection = NO。你希望它是 YES。 我过去曾犯过这个错误,我不小心尝试改写didDeselectItemAtIndexPath。确保你不像我。 如果满足您的目的,请使用[tapGestureRecognizer setCancelsTouchesInView:NO]。它不会发送取消消息,应该可以解决问题。

【讨论】:

【参考方案2】:
- (void)testTouch:(UITapGestureRecognizer*)gesture

    if ([self.collectionView hitTest:[gesture locationInView:self.collectionView] 
                           withEvent:nil])
    
        NSLog(@"testTouch in collection");
     
    else
    
        NSLog(@"testTouch in collection.superview");
    


- (void)viewDidLoad

    [super viewDidLoad];
    UITapGestureRecognizer *g = 
         [[UITapGestureRecognizer alloc] initWithTarget:self 
                                                 action:@selector(testTouch:)];
    g.cancelsTouchesInView = NO;
    [self.collectionView.superview addGestureRecognizer:g];

【讨论】:

以上是关于如果在目标 c 中使用手势,didSelectItemAtIndexPath 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIView滑动手势与目标c中的tableview冲突

如果我多次向手势添加相同的目标/动作会发生啥?

如何在目标 c 中具有某些标签的特定标签上应用 UITapGestureRecognizer

更改 SpriteKit 中摇动手势的灵敏度:目标是创建更快的摇动?

iOS中手势的使用

UICollectionView的选择性手势识别,UIView为子视图