表格视图单元格中 UIView 上的手势识别器

Posted

技术标签:

【中文标题】表格视图单元格中 UIView 上的手势识别器【英文标题】:Gesture Recognizer on UIView in Table View Cell 【发布时间】:2014-08-31 17:28:11 【问题描述】:

在我的表格视图中,每个单元格都包含一个小于单元格的 UIView。我只想在用户点击此 UIView 而不是按下 UIView 外部的单元格时才对详细视图执行 segue。我试图向 UIView 添加手势识别器,但是当调用关联的方法时,它不知道按下了哪个单元格。我能做什么?

【问题讨论】:

【参考方案1】:

您可以以独特的方式将标签属性(整数)分配给每个视图。例如,它可以是整数,是节和行的组合。 或者来自表格数据源的单元格对象的一些唯一 ID。

然后在识别器中你可以分析标签值。

【讨论】:

【参考方案2】:

在你的单元子类中创建一个委托协议(和一个要匹配的委托属性),它有一些方法,比如“cellWasSelected:(MYCell *)cell”。当您在 cellForRowAtIndexPath: 中返回单元格时,将 ViewController 设置为单元格的委托。在单元子类中,添加您想要确定何时被点击的任何机制。一个手势就好了。调用传递 self 作为参数的委托方法。在您的 ViewController 中,您可以调用 tableview indexOfCell (或类似的东西,不记得我头顶的名字)来获取您需要的索引路径。然后,手动执行你的 segue。您可以存储“选定单元格”,甚至可以使用 tableView 手动选择该单元格,如果已经设置,则应该触发您的 segue。

【讨论】:

【参考方案3】:

您应该向您的 CELL 添加一个委托。你可以做什么,你知道,你可以在你的自定义单元格中获取你的 UIView 的引用,如下所示:

@property (nonatomic,weak) IBOutlet UIView *tappableView;

并向其添加手势识别器。

现在,创建一个协议并创建一个方法,

-(void)didTapViewAtCell:(MyCustomCell*)cell

有一个遵循此协议的delegate,并在手势识别器的目标方法中调用它。有点像……

[self.delegate didTapViewAtCell:self];

在您的UITableViewController 中实现此协议并实现此方法。我认为这是继续下去的最佳方式。 :)

【讨论】:

感谢您的回复,但我对协议不是很熟悉,您能否解释一下如何创建协议,以及“有一个遵守此协议的代表”是什么意思“?谢谢 developer.apple.com/library/ios/documentation/general/… 首先阅读此内容。 :) 好的,我读过了,但我不确定是否理解得很好,我仍然不明白如何创建一个协议并拥有一个遵守它的委托...... 好的,我明白了,但有一个问题:在 [self.delegate didTapViewAtCell:self]; 行中,最后一个 self 是 ViewController 类型,该方法需要一个 MyCustomCell 类型的对象。我也有同样的问题:手势识别器的目标方法如何知道选择了哪个单元格? 你应该在MyCustomCell 课堂上做[self.delegate didTapViewAtCell:self]。你正在做的是,你让细胞说,“嘿,我不能做这个工作,你为什么不做呢?”

以上是关于表格视图单元格中 UIView 上的手势识别器的主要内容,如果未能解决你的问题,请参考以下文章

圆形视图上的手势识别器

如何从表格视图单元格中的图像手势获取 indexPath

ios 滑动手势在子视图上未被识别,父视图上的手势

Swift - 将手势识别器添加到表格单元格中的对象

如何将手势识别器添加到collectionview单元格中的uiview

我可以在 tableviewcell 中发现 tableview 手势识别器的状态吗