21

我有一个UITableView每个单元格包含一个UICollectionView.

我可以UITableView垂直滚动并水平滚动嵌套,UICollectionView但是我不能在.UICollectionViewCellUICollectionView

选择在 中禁用,在 中UITableView启用(默认状态)UICcollectionView

UICollectionView's collectionView:didSelectItemAtIndexPath:根本就没有调用。

4

8 回答 8

0

我能够解决这个问题的方法是在单元格中添加一个点击手势识别器来手动处理点击,而不是依赖于didSelectRowAtIndexPathwhich 不会被调用:

迅速

let tapRecognizer = UITapGestureRecognizer(target: self, action: "cellTapped:")
tapRecognizer.numberOfTapsRequired = 1
cell.addGestureRecognizer(tapRecognizer)

Objective-C

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)];
tapRecognizer.numberOfTapsRequired = 1;
[cell addGestureRecognizer:tapRecognizer];

您现在可以处理cellTapped:方法中被点击的单元格,并且可以通过 获取对被点击的单元格的引用tapRecognizer.view

于 2015-01-13T11:42:49.493 回答
0

我刚刚开始工作,所以我想我会与你们分享我的解决方案。

UITableView在为和嵌套设置必要的委托和数据源之后,UICollectionView您可以UICollectionView像这样制作第一个可选视图

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {
    ...
    [tableViewCell bringSubviewToFront:tableViewCell.yourCollectionView];
    return cell;
}

这将使UICollectionView 第一件事可以通过委托选择

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

将使用UITableView委托选择视图的任何其他部分

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

希望这可以帮助!

于 2016-07-19T15:54:07.840 回答
0

您在自定义中拥有的所有视图UITableViewCell都应相对于contentView. 所以总是将它们作为子视图添加到contentView并且选择应该有效。

class CustomTableViewCell: UITableViewCell {
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        let view = UIView()
        contentView.addSubview(view)

        // layout
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
于 2021-06-28T09:05:22.893 回答
-1

我的第一直觉是两个视图之间的手势识别器可能是冲突的

更具体地说,用于点击的 UITableView GRs 可能会阻止 UICollectionView GRs 接收触摸

于 2013-05-17T09:43:21.583 回答
-1

首先请检查您是否提供了必要的数据源和委托。然后,如果您在特定数量的表格视图单元格上使用集合视图,您可以直接放在原型单元格中。请确保您的单元格有适当的限制(宽度)

于 2015-04-03T12:44:14.553 回答
-1

尝试禁用delaysContentTouchestableView确保delegate您的集合视图设置正确。

于 2016-11-16T23:43:05.753 回答
-1

我已经用故事板和编程方式进行了测试,它按预期工作。我收到 collectionView:didSelectItemAtIndexPath: 或 tableView:didSelectRowAtIndexPath 取决于点击区域。看来,至少在较新的 SDK(我的是 11.4)中,它是固定的。

于 2018-11-09T13:46:10.863 回答
-3

这根本不应该是一个问题!无需自定义手势识别器。无需禁用 tableview 的选择。

务必:

  1. 在情节提要或代码中设置您的表格视图并设置其数据源和委托
  2. 在将 tableviewcell 出列后,在 cellforrowatindexpath 中获取对相应 collectionview 的引用并设置其(collectionviews)数据源和委托
  3. 实现 tableviews 和 collectionviews 委托 didselect 方法并记录他们的调用以查看它是否有效

在我写下那个答案以确保没有问题之前,我刚刚实施了一个小示例项目。如果它仍然不适合你,我可以上传它!

祝你好运!

于 2015-04-22T13:26:13.770 回答