表格视图单元格中 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 上的手势识别器的主要内容,如果未能解决你的问题,请参考以下文章