UICollectionViewCell中的UITableView,点击单元格时会突出显示所有UITableViewCell
我正在创建一个UICollectionView
,其中一些UICollectionViewCells
包含一个UITableView
。
这很好用,一切都很好,直到我点击UICollectionViewCell
而不是UITableView
。 这会导致在表中的所有UITableViewCells
上调用setHighlighted
方法。
下面是UICollectionViewCell的粗略UICollectionViewCell
。 UITableView
仅从“单元格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之后突出显示。