6

我正在制作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 时。据我了解,这在大多数其他情况下很有用。

4

2 回答 2

2

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

collectionView:shouldHighlightItemAtIndexPath:

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

于 2013-10-18T08:08:22.543 回答
2

为了解决这个问题,并允许在直接点击时突出显示表格视图单元格,并避免覆盖 collectionView:shouldHighlightItemAtIndexPath: 因为它阻止了选择的发生,我重写了 UICollectionViewCell 的 setHighlighted 方法并反转了它在我的表格视图单元格上所做的突出显示. This way, my table view cells don't appear highlighted when the collection view is selected.

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

于 2014-05-18T22:06:44.523 回答