UICollectionView委托的抽头方法没有被调用
我有一个集合视图,数据源委托工作正常,但UICollectionViewDelegate
:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"didselect"); }
没有被调用,虽然我设置委托(因为我做了数据源,它的工作),我不得不提到,我的细胞是从一个笔尖加载,并连接到UICollectionViewCell
的子类,无论如何,单元格不响应我的触摸。 我在我的单元格中的UIImageView
中启用了用户交互。
还有:
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"this is caled"); return YES; }
没有被调用!
正如我刚才提到的那样:
[self.collectionView setDelegate:self];
而且当然
<UICollectionViewDelegate>
我也没有任何touchBegan
覆盖..
更新 :
奇怪的! 如果我长时间按下,它只会被调用! 我怎样才能解决这个问题,我把delayedContentTouches设置为NO,而且我没有任何手势识别器。
请帮助。 谢谢。
看起来在视图层次结构中有一个UITapGestureRecognizer
。 默认情况下, UITapGestureRecognizer
消耗他们接受的触摸,这意味着它不会被传递到层次结构下面的视图。 你需要findstream氓轻拍的手势,并添加此行
tapGestureRecognizer.cancelsTouchesInView = NO;
这将使它在层次结构中传递到它下面的视图,并希望解决您的问题。
看起来你已经添加TapGestureRecognizer的地方,它阻止select的单元格。 检查他们,这应该是问题。
我面临着同样的问题,即点击自定义的UICollectionView Cell,它没有检测到点击。 在我的情况下,问题是在CustomCell的Xib中,userInteraction被启用,这就是为什么UICollectionview的didSelectItemAtIndexPath没有被调用,而是用户点击信息被发送到特定的单元格,我没有处理程序。
我有一个与PSUICollectionView类似的问题(这也适用于iOS5),我通过在我的CollectionViewCell上放置一个button并设置该button的目标来修复它。同时添加标签来知道哪个button被按下。
也许你应该在集合视图上使用轻击手势。
在你的.h文件中,导入CellViewController并添加委托
#import "myColleCell.h" UIViewController<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
在你的.m文件中,将下面的代码添加到你的ViewDidLoad
,
UINib *cellNib = [UINib nibWithNibName:@"myColleCell" bundle:nil]; [myCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"myColleCell"]; UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; [flowLayout setItemSize:CGSizeMake(220, 220)]; [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; [myCollectionView setCollectionViewLayout:flowLayout];
并用你的CellViewController
设置单元格
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier= @"myColleCell"; myColleCell *cell = (myColleCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; [cell setupCell:[dataArray objectAtIndex:indexPath.row]]; //setup cell function methods placed in your CellViewController return cell; }
最后确保你的cellView,collectionView被设置为YES
确保没有任何对象将UICollectionViewController
上的userInteractionEnabled
属性设置为NO
。
类似于其他人所说的,我有这个相同的问题,并通过删除调用userInteractionEnabled
调用,其中父视图添加它作为子视图控制器。 我能够通过添加一个UIButton
来testing这个单元格,并确定即使它不能接收触摸事件。
添加这里作为其他人正在寻找答案的参考
简答:
延迟与tableview关联的默认手势识别器的触摸:
if let gestures = tableView.gestureRecognizers{ for gesture in gestures { gesture.delaysTouchesBegan = true } }
说明
每个tableview都有与之相关的手势识别器。 这导致触摸延迟自定义UItableView单元格。 将delaysTouches设置为true,以便可以将触摸快速传递给子视图。
在我的情况下,它是UIViewViewCell中的CollectionViewController ,其中collectionView:didSelectItemAtIndexPath被延迟调用。