我有一个UITableView
,其中每个单元格都包含UICollectionView
。
我可以垂直滚动UITableView
并水平滚动嵌套的UICollectionView
,但我无法在UICollectionViewCell
中选择UICollectionView
。< / p>
在UITableView
中禁用了选择,并在UICcollectionView
中启用了选项(默认状态)。
永远不会调用UICollectionView's
collectionView:didSelectItemAtIndexPath:
。
答案 0 :(得分:0)
我能够解决这个问题的方法是向单元格添加一个轻击手势识别器来手动处理点击,而不是依赖于未被调用的didSelectRowAtIndexPath
:
<强>夫特强>
let tapRecognizer = UITapGestureRecognizer(target: self, action: "cellTapped:")
tapRecognizer.numberOfTapsRequired = 1
cell.addGestureRecognizer(tapRecognizer)
<强>目标C 强>
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)];
tapRecognizer.numberOfTapsRequired = 1;
[cell addGestureRecognizer:tapRecognizer];
您现在可以使用cellTapped:
方法处理正在点按的单元格,您可以获取通过tapRecognizer.view
点击的单元格的引用。
答案 1 :(得分: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;
希望这有帮助!
答案 2 :(得分:0)
我已经用情节提要和编程方式进行了测试,并且按预期运行。我收到collectionView:didSelectItemAtIndexPath:或tableView:didSelectRowAtIndexPath,具体取决于所点击的区域。看来,至少在较新的SDK(我的是11.4)中,它是固定的。
答案 3 :(得分: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")
}
}
答案 4 :(得分:-1)
我的第一直觉是两个视图之间的手势识别器可能存在冲突
更具体地说,用于点击的UITableView GR可能会阻止UICollectionView GR接收触摸
答案 5 :(得分:-1)
首先检查您是否提供了必要的数据源和代理。 然后,如果您在特定数量的表视图单元格上使用集合视图,则可以直接将其放入原型单元格中。请确保您的单元格具有适当的限制(宽度)
答案 6 :(得分:-1)
尝试为delaysContentTouches
停用tableView
,并确保正确设置了集合视图的delegate
。
答案 7 :(得分:-3)
这根本不是问题!无需自定义手势识别器。无需禁用tableview的选择。
请务必:
我在编写答案之前刚刚实现了一个小示例项目,以确保没有问题。我可以上传它,如果它仍然不适合你!
祝你好运!