UICollectionViewCell中的UITableView,点击单元格时会突出显示所有UITableViewCell

我正在创建一个UICollectionView ,其中一些UICollectionViewCells包含一个UITableView

这很好用,一切都很好,直到我点击UICollectionViewCell而不是UITableView 。 这会导致在表中的所有UITableViewCells上调用setHighlighted方法。

下面是UICollectionViewCell的粗略UICollectionViewCellUITableView仅从“单元格1”跨越到“单元格3”。 点击此表外的任何位置,但在UICollectionViewCell内部会导致单元格突出显示。

 ------------------------- | Title goes here | | | ------------------------- | | | Cell one | ------------------------- | | | Cell two | ------------------------- | | | Cell three | ------------------------- | Button outside table | |-----------------------| 

调用堆栈看起来像这样。

 [MyTableViewCell setHighlighted:] [UICellHighlightingSupport highlightView:] UIApplicationMain main 

似乎UICollectionViewCell将突出显示命令转发给所有单元格。

我通过在我的UITableViewCell子类中重载setHighlighted方法而不调用超级实现来解决这个问题。 这看起来有点哈哈,我想知道这种行为是否可以以某种方式避免。

编辑:我认为这种行为来自于UICollectionCellView在其所有子节点上调用setHighlighted。 我理解的在大多数其他情况下都很有用。

您是否尝试过实现以下UICollectionViewDelegate的方法?

 collectionView:shouldHighlightItemAtIndexPath: 

如果在集合视图中为UITableView视图返回NO,那么你应该很高兴。

要解决这个问题,并允许在直接点击时突出显示表格视图单元格,并避免覆盖collectionView:shouldHighlightItemAtIndexPath:因为它阻止了选择的发生,我覆盖了UICollectionViewCell的setHighlighted方法,并颠倒了它在我的表视图单元格上执行的突出显示。 这样,选择集合视图时,我的表格视图单元格不会突出显示。

 - (void) setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; if (highlighted) { dispatch_async(dispatch_get_main_queue(), ^ { for (UITableViewCell* cell in self.tableView.visibleCells) cell.highlighted = NO; }); } } 

我发送了突出显示,因为看起来UICollectionViewCell也会延迟突出显示。 我需要在UICollectionViewCell之后突出显示。