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

时间:2013-10-18 07:57:11

标签: ios objective-c uitableview

我正在制作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对其所有子节点的影响。在大多数其他情况下,我理解这一点很有用。

2 个答案:

答案 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之后突出显示。