在UICollectionView中处理UITableView的触摸事件。

10
集合视图由单行水平对齐的单元格组成,其大小与集合视图的边界相同,单个单元格填满整个屏幕。
问题在于集合视图似乎拦截了所有手势。如何将它们转发到表格,以便我也可以垂直滚动表格。
我希望将垂直手势传递给单元格内的表格,以便它可以上下滚动。我希望将水平手势传递给集合视图,以便它可以水平滚动。
有什么想法吗?谢谢。

使用StoryBoard,在collectionViewCell中将tableView作为self.view的子视图添加进去。 - LE SANG
集合视图是一个已有视图的子视图。表视图被插入到集合视图的原型单元格中,在运行时它在cell.contentView中。点击事件确实会传递到表格视图,我可以看到内部的单元格被选中。 - foFox
是的,在单元格方框(cell.contentView)中拖入tableView。下面展示一些代码。 - LE SANG
是的,那就是我已经有的。似乎不起作用。实际上没有代码。我只是执行“return collectionView dequeueReusableCellWithReuseIdentifier:@”sample“ forIndexPath:indexPath]”。 - foFox
不要忘记为tableView设置delegate和datasource。尝试显示一些tableCell并进行测试。 - LE SANG
添加委托/数据源并显示单元格仍然无法解决问题。我相当确定我必须重写触摸传递或更改手势识别器,只是我不太清楚如何做。 - foFox
3个回答

16

对于在storyBoard中使用的CollectionView内部的UITableView,请按照以下步骤操作:

- 将CollectionView拖到UIViewController中,将数据源拖到UIViewController中(不要拖动代理)。将数据源方法添加到ViewController.m中

- 创建Cell:CollectionViewCell类。在storyBoard中为单元格选择类以及指定重用ID。

- 在CollectionCell方框中拖动tableView。同样将委托和数据源拖动到CollecionCell Square中。在Cell.m中添加tableView数据源和委托。

- 当实现tableViewDidSelect时,请创建CellDelegate。将此代理传递给UIViewController以执行其他操作

示例代码: https://github.com/lequysang/github_zip/blob/master/TableViewInCollection.zip


是的,那个方法可行,我忘了提到,我正在使用自定义布局,它是UICollectionViewFlowLayout的子类。它似乎是所有问题的根源。 - foFox
嗨,在代码中,如果我增加了集合视图中的单元格数量。在集合视图的第三个单元格中,它显示的是第一个表视图,而不是第三个。如何解决? - souvickcse

2

Swift2 更新 - 我们不需要执行上述所有步骤。只需将控制器作为表视图和集合视图的代理和数据源即可。


0

我已经能够实现这个功能而不使用故事板--虽然,我使用XIB来为我的视图添加自动布局规则。所有的自定义(颜色、字体、标签等)都是在代码中设置的。无论如何,这也适用于以编程方式构建的单元格。

如何做到:

  • 最重要的是要记住将自定义视图添加到单元格的contentView属性中,而不是单独放在单元格里面。如果您正在为自定义UICollectionViewCell使用XIB,请将其保留为空白。在自定义视图中实例化(即UITableView所在处),然后将其作为子视图添加到UICollectionViewCellcontentView中。如果您直接将表视图放在集合视图单元格内,表视图将无法垂直滚动

  • 实现UICollectionViewDelegateshouldSelectItemAtIndexPathshouldHighlightItemAtIndexPath方法,并将两者都返回false,以便点击集合视图单元格时不会与打算用于表视图内部的触控相冲突。

使用Xcode 7.3完成,适用于iOS 9及以上版本。


你能分享一下你的演示吗? - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接