【发布时间】:2014-08-31 17:28:11
【问题描述】:
在我的表格视图中,每个单元格都包含一个小于单元格的 UIView。我只想在用户点击此 UIView 而不是按下 UIView 外部的单元格时才对详细视图执行 segue。我试图向 UIView 添加手势识别器,但是当调用关联的方法时,它不知道按下了哪个单元格。我能做什么?
【问题讨论】:
标签: ios xcode uitableview uiview uigesturerecognizer
在我的表格视图中,每个单元格都包含一个小于单元格的 UIView。我只想在用户点击此 UIView 而不是按下 UIView 外部的单元格时才对详细视图执行 segue。我试图向 UIView 添加手势识别器,但是当调用关联的方法时,它不知道按下了哪个单元格。我能做什么?
【问题讨论】:
标签: ios xcode uitableview uiview uigesturerecognizer
您可以以独特的方式将标签属性(整数)分配给每个视图。例如,它可以是整数,是节和行的组合。 或者来自表格数据源的单元格对象的一些唯一 ID。
然后在识别器中你可以分析标签值。
【讨论】:
在你的单元子类中创建一个委托协议(和一个要匹配的委托属性),它有一些方法,比如“cellWasSelected:(MYCell *)cell”。当您在 cellForRowAtIndexPath: 中返回单元格时,将 ViewController 设置为单元格的委托。在单元子类中,添加您想要确定何时被点击的任何机制。一个手势就好了。调用传递 self 作为参数的委托方法。在您的 ViewController 中,您可以调用 tableview indexOfCell (或类似的东西,不记得我头顶的名字)来获取您需要的索引路径。然后,手动执行你的 segue。您可以存储“选定单元格”,甚至可以使用 tableView 手动选择该单元格,如果已经设置,则应该触发您的 segue。
【讨论】:
您应该向您的 CELL 添加一个委托。你可以做什么,你知道,你可以在你的自定义单元格中获取你的 UIView 的引用,如下所示:
@property (nonatomic,weak) IBOutlet UIView *tappableView;
并向其添加手势识别器。
现在,创建一个协议并创建一个方法,
-(void)didTapViewAtCell:(MyCustomCell*)cell
有一个遵循此协议的delegate,并在手势识别器的目标方法中调用它。有点像……
[self.delegate didTapViewAtCell:self];
在您的UITableViewController 中实现此协议并实现此方法。我认为这是继续下去的最佳方式。 :)
【讨论】:
MyCustomCell 课堂上做[self.delegate didTapViewAtCell:self]。你正在做的是,你让细胞说,“嘿,我不能做这个工作,你为什么不做呢?”