4

我试图让 a在 aUIScrollView内正常工作UICollectionViewCell

自定义单元格正在通过 xib 文件加载,并且是UICollectionViewCell. 我在让其他控件正常工作时遇到了问题,例如按钮和手势识别器,因为它们UICollecitonView似乎没有向单元格传递任何触摸,但我绕过了那些UICollectionView本身带有手势识别器的控件。我剩下的一个问题是 UIScrollViews ......

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

有人有什么想法吗?

编辑:明白了!

所以我已经从我们在 iOS6 之前使用的以前的第三方库转换为集合视图。原来问题出在我们用于单元格的 xib 文件上。在之前的库中,单元格只是 UIView 的子类。我将类更改为 subclass UICollectionViewCell,并更新了自定义类。事实证明这还不够。为了让触摸传递到单元格,我实际上必须UICollectionViewCell从对象库中拖入一个新的,复制所有子视图并重新连接IBOutlets. 在此之后,它起作用了!

4

2 回答 2

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
}
于 2014-04-17T15:47:32.837 回答
-2

UICollectionViewCell 中的 UISCrollView 没有问题。使用 StoryBoard,您将滚动确定。UIScrollView 覆盖 UICollectionViewCell,因此 didSelect 仅在点击 ScrollView 外部和 Cell 内部 (scrollView.frame < cell.frame) 时起作用。

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

参考代码:

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

于 2013-03-14T01:43:55.100 回答