我正在制作UICollectionView
,其中UICollectionViewCells
部分包含UITableView
。
这很好用,一切都很好,直到我点击UICollectionViewCell
以外的其他地方UITableView
。这会导致在表中的所有setHighlighted
上调用UITableViewCells
方法。
以下是UICollectionViewCell
的粗略观察。 UITableView
仅限于{。}}
“细胞一”到“细胞三”。点击此表外的任何位置,但在UICollectionViewCell
内部会导致单元格突出显示。
-------------------------
| Title goes here |
| |
-------------------------
| |
| Cell one |
-------------------------
| |
| Cell two |
-------------------------
| |
| Cell three |
-------------------------
| Button outside table |
|-----------------------|
调用堆栈看起来像这样。
[MyTableViewCell setHighlighted:]
[UICellHighlightingSupport highlightView:]
UIApplicationMain
main
似乎UICollectionViewCell
将突出显示命令转发给所有单元格。
我通过在setHighlighted
子类中重载UITableViewCell
方法并且不调用超级实现来解决这个问题。这看起来有点像hacky,我想知道这种行为是否可以以某种方式避免。
修改
我假设这种行为来自于UICollectionCellView
调用setHighlighted对其所有子节点的影响。在大多数其他情况下,我理解这一点很有用。
答案 0 :(得分:2)
您是否尝试过实施以下UICollectionViewDelegate
方法?
collectionView:shouldHighlightItemAtIndexPath:
如果您在集合视图中为UITableView
个视图返回NO,那么您应该很高兴。
答案 1 :(得分:2)
要解决此问题,并允许在直接点击时突出显示表格视图单元格,并避免覆盖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之后突出显示。