从另一个单元格中检测单元格选择

Posted

技术标签:

【中文标题】从另一个单元格中检测单元格选择【英文标题】:Detecting Cell Selection from within Another Cell 【发布时间】:2016-08-12 17:34:01 【问题描述】:

我有一个 UICollectionView。它的单元格内部有一个 UICollectionView。

我可以检测到何时点击了包含 collectionView 的单元格(通过 didSelectItemAtIndexPath)。但是,我无法检测到单元格内的 collectionView 单元格(如单个太阳图标所示)何时被点击。

所有内容都启用了用户交互。我已经尝试覆盖 collectionView as described here 的 hitTest。

更新:我在一个简单的测试项目中再次尝试了这个,它运行良好。但是在我当前的项目中,由于某种原因,最里面的嵌套 collectionView(带有太阳图标)没有出现在视图调试器中。

请注意,我将 collectionView 背景设为蓝色,将其单元格设为粉红色。尽管它们出现在正在运行的应用程序中,但它们在调试视图时不会出现?

【问题讨论】:

您是否将包含 UICollectionView 的 UICollectionViewCell 的委托设置为 self?这意味着您应该将 UICollectionViewCell 子类化并在该子类中设置 UICollectionView 并将该 UICollectionView 的委托设置为 UICollectionViewCell。此外,您不需要搞乱命中测试。很少有 UIResonder 链需要大规模干预的情况,我怀疑你需要比正确设置委托更进一步。 @Loxx 是的,内部collectionView的委托设置为它所在的单元格 嗯,让我拉起旧项目,看看我是如何解决这个问题的。我很快就会在这里发帖 @Loxx 谢谢,这将非常有帮助:) 为 Storyboard 中的 CollectionView 禁用“取消触摸视图”。 【参考方案1】:

我以前做过这个……但这有点难以解释。 简短的回答是 TapGestures。

所以我通过情节提要绘制了 tableView。集合视图是以编程方式添加的。

对于 TableView cellforRow,我调用了 UITableViewCell 子类。我作为委托传递了 rootView。这称为 CollectionViewClass。这是绘制单元格的实际项目并将其添加到集合视图的位置。此时我有rootdelegate。我为每个项目添加一个 tapGesture。

    let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped))

所以现在每个项目内部都有一个点击手势。现在,在我正在绘制的视图中,我可以调用点击单元格的 rootview。

func viewTapped() 
    tapDelegate?.milestoneTapped(passID) //tapDelegate = RootView

我希望这会有所帮助。

【讨论】:

我希望尽可能使用 UICollectionView 委托方法而不是解决方法。如果我最终无法使用内置功能,我会试试这个【参考方案2】:

一旦我从对单元格使用 XIB 更改为使用情节提要中的常规单元格,就不会出现此问题。

【讨论】:

以上是关于从另一个单元格中检测单元格选择的主要内容,如果未能解决你的问题,请参考以下文章

怎么在excel中一个单元格中显示出自动计算的标记背景颜色的单元格数值的和

如何通过Excel中的VB减去从另一个单元格中键入的值?

如何检测是不是在多个彼此不相邻的单元格中删除了文本

在tableView中选择多个单元格并将另一个tableView单元格中的选定单元格显示为标签?

IOS/Objective-C:检测自定义表格视图单元格中的按钮按下?

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图