Select UICollectionView 选择上的 UITableView

Select the UITableView on UICollectionView selection

我在UITableViewCell里面有一个UICollectionView。当我 select tableView 行时,我不希望 UICollectionViewdidSelectItemAtIndexPath: 方法被调用。相反,我希望调用 UITableViewdidSelectRowAtIndexPath: 方法。我如何在 didSelectItemAtIndexPath: 中调用 didSelectRowAtIndexPath:

设置 collectionView.allowsSelection = NO 以禁用选择。

或者在 didSelectItemAtIndexPath 方法中,获取 UITableViewCell 并调用委托,它是具有 UITableView 的 table 视图:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *parentCell = collectionView.superview;
    [parentCell.delegate collectionViewDidSelectedAtCell:parentCell];
}
// IN your view controller that has the table view

- (void)collectionViewDidSelectedAtCell:(UITableViewCell *)cell{
     NSIndexPath *index = [self.tableView indexPathForCell:cell];
     [self tableView:self.tableView didSelectRowAtIndexPath:index];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

}

Swift 3

首先设置如下

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let parentCell: QMatrixCell? = collectionView.superview?.superview as! QMatrixCell?
    parentCell?.delegate.collectionViewDidSelectedAtCell(cell: parentCell!)
}

并在包含您的表视图的控制器中执行以下操作

extension TableViewController: SelectionCell{
 func collectionViewDidSelectedAtCell(cell : QMatrixCell){
    let index: IndexPath? = tableView.indexPath(for: cell)
    tableView(tableView, didSelectRowAt: index!);
 }
} 
protocol SelectionCell {
   func collectionViewDidSelectedAtCell(cell : QMatrixCell);
}

并且不要忘记在您的 tableView 单元格中设置委托。