自定义UICollectionViewCell中的UIScrollview不起作用

时间:2013-03-13 20:25:35

标签: ios ipad uiscrollview uicollectionview uicollectionviewcell

我正试图让UIScrollViewUICollectionViewCell内正常工作。

自定义单元格是通过xib文件加载的,是UICollectionViewCell的子类。我在使其他控件工作时遇到了问题,例如按钮和手势识别器,因为UICollecitonView似乎没有向细胞传递任何触摸,但我在{{1}上找到了带有手势识别器的人本身。我剩下的一个问题是UIScrollViews ......

UICollectionView水平滚动,单元格中的UICollectionView垂直滚动。我尝试使用UIScrollView滚动它们,但这似乎禁用了UIPanGestureRecognizer滚动功能。

有人有任何想法吗?

编辑:知道了!

所以我从之前在iOS6之前使用的第三方库转换为集合视图。原来问题在于我们用于单元格的xib文件。对于之前的库,单元格只是UIViews的子类。我将类更改为子类UICollectionView's,并更新了自定义类。事实证明这还不够。为了将触摸传递给单元格,我需要实际从对象库中拖入新的UICollectionViewCell,复制所有子视图并重新连接UICollectionViewCell。在此之后,它奏效了!

2 个答案:

答案 0 :(得分:0)

我通过确保在主线程上调整滚动视图的大小来修复我的代码。

我的集合视图正在使用nsfetchedresultscontroller,它使用块调用来刷新所选单元格。在第一次选择单元格时,滚动视图不会滚动。但是,如果您单击另一个单元格并单击它,它将正常工作。单元格的初始加载似乎大小计算可能不是需要在主线程上影响行为的位置。

-(UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell =  [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
    dispatch_async(dispatch_get_main_queue(), ^{
        // resizeScrollViewMethod should be where scrollview content size > scroll view frame.
        [cell resizeScrollViewMethod];
    });
    return cell;
}

- (void) resizeScrollViewMethod {
    //Do your scrollview size calculation here
}

答案 1 :(得分:-2)

UICollectionViewCell中的UISCrollView没问题。使用StoryBoard,你将滚动OK。 UIScrollView覆盖UICollectionViewCell,因此只有在ScrollView外部和Cell内部(scrollView.frame< cell.frame)时,didSelect才能工作。

如果要实现点击或其他手势,只需将其添加到awakeFromNib中的UIScrollView

参考代码:

https://github.com/lequysang/github_zip/blob/master/CollectionViewWithCellScrollViewStoryBoard.zip