【问题标题】:How can I detect taps to a specific area/rect of a UITableViewCell?如何检测对 UITableViewCell 特定区域/矩形的点击?
【发布时间】:2015-06-10 17:17:17
【问题描述】:

我有一个使用 4 个自定义 UITableViewCell 的 UITableViewController。

其中 2 个自定义单元格需要特殊行为。

而不是检测用户是否通过 didSelectRowAtIndexPath 选择了行/单元格...我需要更具体地检测点击。

例如,我的一个自定义单元基本上是 2 个按钮。单元格左侧有一个按钮,右侧有一个按钮。

1) 最好的方法是将按钮的代表连接到我的视图控制器,以便按钮工作,还是我想尝试检测用户点击的特定矩形/区域?

【问题讨论】:

  • 所以,问题是“我在一个单元格上有一个按钮。如何判断它是否被按下?”
  • @Stonz2 是的,我该怎么做。在我第一次初始化单元格之后,我会 a) 为按钮连接代表,对吗?然后 b) 我没有按钮的 IBAction。如何检测它的水龙头?

标签: ios objective-c uitableview cocoa-touch


【解决方案1】:

连接按钮,这就是它们的用途

【讨论】:

    【解决方案2】:

    将此添加到您的 tableview 的 cellForRowAtIndexPath:

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodToCallWhenPressed)];
    [tap setNumberOfTouchesRequired:1];
    [tap setNumberOfTapsRequired:1];
    [cell.button addGestureRecognizer:tap];
    

    您还需要从自定义单元格中的按钮创建一个IBOutlet

    【讨论】:

      【解决方案3】:

      只需使用 target-action 来观察按钮。如果您在处理不应发生的单元吞噬触摸事件时遇到问题,请尝试覆盖 -hitTest:withEvent:

      【讨论】:

      • 您是否必须在每个单元格上创建一个委托,以便在点击自定义 UITableViewCell 上的按钮的 IBAction 时,它可以将一些信息发送回被点击的 TableViewController?我如何知道按钮被点击的是哪个单元格?
      • 委托可以通知控制器事件。至于如何识别单元格:只需添加控制器设置的属性,如果是静态内容,甚至可能是索引路径。
      【解决方案4】:

      如果您对 UIButton 不满意,您可以使用 UILabel。例如,您可以在自定义 UITableViewCell 的每一侧添加 2 个 UILabel,调整它们的大小以填充您想要的区域,然后添加 2 个 UITapGesturesRecognizers。我把步骤留在这里:

      • 使用界面生成器将 2 个 UILabel 添加到自定义单元格
      • 转到“属性检查器”选项卡,找到“用户交互启用”并启用它。 (对每个 UILabel 执行此操作)
      • 将 UILabel 连接到自定义单元控制器 (IBOutlet)
      • 为每个 UiLabel 添加一个 UITapGesturesRecongnizer
      • 创建一个 Delegate 将 Touch 事件从 Custom cell 类传递到 TableView Controller 以处理 Touch。

      就是这样!

      我将在此处为您留下一张自定义单元格的图片

      https://www.dropbox.com/s/u97n9yqtgd8x196/label.jpg?dl=0

      如果您需要其他东西,请告诉我!

      祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-08
        相关资源
        最近更新 更多