带有包含 UITableViews 的单元格的 UICollectionView

Posted

技术标签:

【中文标题】带有包含 UITableViews 的单元格的 UICollectionView【英文标题】:UICollectionView with cells containing UITableViews 【发布时间】:2012-11-16 14:55:29 【问题描述】:

在 UICollectionView 的单元格中使用 UITableView 是否有任何限制?

我试图找到一些这样做的示例项目,但没有任何运气

【问题讨论】:

我目前正在处理一个带有表格视图的项目,该项目在每个单元格中包含一个集合视图,每个单元格中都包含一个视图控制器,有时可能包含一个表格视图。我们称之为 InceptionViewController... 【参考方案1】:

这是您需要注意的一个问题。如果您的集合视图单元格包含一个表格视图,并且您点击该单元格(而不是表格视图),那么默认情况下,集合视图会将其自身设置为突出显示(对于标准单元格而言,它什么也不做)。但是,在此过程中,它还将表格中的每个单元格设置为突出显示,这很糟糕,但有点意料之中。如果您考虑一下,表格单元格会做同样的事情 - 所有单元格的子视图,如果它们响应setHiglighted,就会将该消息传递给它们。这就是单元格中的标签文本在突出显示时如何改变颜色。

您可以通过防止在集合视图的委托中突出显示单元格来解决此问题。

【讨论】:

返回 NO:-(BOOL) collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath【参考方案2】:

没有我知道的硬性技术限制。 UITableViews 在UITableViews 中是可能的,从编程逻辑的角度来看,UICollectionViews 非常相似。

但是,在集合视图或表格视图中滚动可能会对性能产生巨大影响。

首先。您需要仔细编码以避免对tableView:cellForRowAtIndexPath:collectionView:cellForItemAtIndexPath: 方法的任何肤浅调用。如果您在开始冒险之前尝试在集合视图或表格视图中使用可重用单元格,请确保您彻底了解这些调用背后的逻辑。

第二。如果两个组件都是可滚动的,则层次结构中两个视图控制器的 panGestureRecognizers 存在并发问题,您必须自己解决。

UIScrollView 中搜索UITableView 的实现,反之亦然,以了解可能出现的问题。

【讨论】:

【参考方案3】:

我试图找到一些这样做的示例项目

我认为您不需要示例项目 -- 去做吧。

-collectionView:cellForItemAtIndexPath: 应该返回一个UICollectionViewCell。 UITableView 不继承自该类,因此要在集合视图中使用表,您需要创建一个包含 UITableView 的 UICollectionViewCell 子类。除了可能的性能问题之外,我认为这样做没有问题。如果您一次只能在集合视图中看到一两个单元格,那可能不是问题。不过,我会避免尝试用十几个小桌子做网格之类的事情。试一试,看看效果如何。

【讨论】:

以上是关于带有包含 UITableViews 的单元格的 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

包含 UITableView 的 UITableViewCell 的高度(iOS8 和 AutoLayout)

带有 3 个 UITableViews 的 UIScrollView

具有静态单元的 UItableView 包含 2 个 UItableview,每个都有具有动态高度的自定义单元

带有包含自定义单元格的 UITableView 的 UISearchBar => 空白单元格

UIViewController xib 文件包含一个带有自定义单元格的集合视图

保存链接到单元格的 UITextView 文本