iOS 7:选择UICollectionViewCell将在其中的UITableView中选择单元格

时间:2014-04-16 14:00:29

标签: ios uitableview ios7 uicollectionview

简而言之:如何防止选择集合视图单元格影响该集合视图单元格内的表格视图单元格的选择状态?

我有一个UICollectionView,其中单元格在选中时全屏显示。单元格包含一个UITableView,它将显示使用信息。

我遇到的问题是表格视图中的单元格显示为好像已被选中。我移动了一些东西,一直显示一个单元格全屏,这让我可以确认:当选择了集合视图单元格时,其中的表格视图的单元格也会以所选样式显示。

请注意,我说他们以所选样式显示而不是他们被选中。就表格视图而言,它们不是已选中。

[tableView indexPathsForSelectedRows];不返回索引路径。 tableView:willSelectRowAtIndexPath: - 我可以从中返回nil - 从未被调用过。因此,可以肯定地说,表格视图并没有将自己的单元格视为被选中。

但是,我可以在Reveal中确认表格视图单元格包含所选的背景视图(请参阅下面的最后一个屏幕截图)。这仅适用于选择集合视图单元格时可见的表格视图单元格:对于列表中距离较远的单元格而言,这不会发生在最初的屏幕外。

我可以使用cell.selectionStyle = UITableViewCellSelectionStyleNone;来隐藏问题,最终,这可能是我的解决方案:无论如何都不会选择表格视图单元格,因此在这种情况下绘制问题应该适用于我的情况。

但是,这并没有回答更大的问题:这里到底发生了什么?

截图

正常集合视图单元格(整个事物是一个单元格):

Normal cell view

选定的集合视图单元格,在表格视图中具有灰色选定样式:

Selected cell

显示,显示所选的背景视图。在这种情况下,当选择了集合视图单元格时,包含“删除”按钮的表格单元格不可见,因此它没有像上面的单元格那样获得选择样式:

Selected Background view

2 个答案:

答案 0 :(得分:1)

显然,这是iOS 7中的预期行为。setHighlighted:会在支持它的所有子视图上调用。

答案 1 :(得分:1)

我以这种方式覆盖了UITableViewCell的方法

func setHighlighted(_ highlighted: Bool, animated: Bool)
{
   //Leave Empty
}

Apple的行为可能是正确的,因为通过这种方式,您可以跳过所有孩子的迭代并手动设置属性,但为什么我不能选择是否使用UICollectionViewDelegate方法

func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool