【问题标题】:UITableView need long press to select a rowUITableView 需要长按选择一行
【发布时间】:2013-11-27 01:21:09
【问题描述】:

有人遇到过UITableView需要长按才能触发didSelectRowAtIndexPath方法的问题吗?

【问题讨论】:

  • @iPatel 感谢您的即时答复,它有效~
  • @keywind:如果 iPatel 解决了您的问题,请接受 iPatel 的回答

标签: ios iphone objective-c tableview long-press


【解决方案1】:

在我的情况下,我的视图上有一个 UITapGestureRecognizer 用于隐藏我的键盘。

这解决了问题:

tap.cancelsTouchesInView = false

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题:

    • 我使用 Tap Gesture 识别器来管理视图控制器中的不同操作
    • 我想要一个经典的点击(短按)来触发 didSelectRowAtIndexPath 方法,但默认情况下只需长按即可

    我在表格视图中通过短按(按)选择单元格的解决方案:

    • 在故事板中选择您的点击手势识别器
    • 转到属性检查器并取消选择“视图中已取消”

    【讨论】:

    • 这也是我的问题。该标志被称为“cancelsTouchesInView”,这是有道理的。
    【解决方案3】:

    如果您使用过任何手势识别器,请尝试将其移除并检查是否导致问题?

    其他方面

    不确定,但问题可能出在UITableView 已将delaysContentTouches 设为开启。将此OFF关闭,以便触摸更快地进入单元格。

    【讨论】:

      【解决方案4】:

      您必须将 UILongPressGesture 添加到您的单元格视图中,并且只需从采用 UITableViewDelegate 的类中调用 didSelectRowAtIndexPath(最好是调用另一个方法 - 不是标准 UITableViewDelegate 的方法)。

      我会建议你创建自己的协议,继承自 UITableViewDelegate,为长按行为方法添加方法并享受。类似于:

      @protocol LongPressTableViewCellDelegate <UITableViewDelegate>
      - (void)tableView:(UITableView *)tableView didLongTapCell:(UITableViewCell *)cell;
      @end
      

      在这种情况下,您的委托将采用不是标准的 UITableViewDelegate,而是这个。此外,您必须创建自己的单元格(从 UITableViewCell 继承)并在那里添加委托属性(id),该属性将在长按触发时使用。

      还可能存在标准 didSelectRowAtIndexPath 会在您的长按触发之前触发的情况,因此我建议您禁用表格视图的标准选择行为:

      _tableView.allowsSelection = NO;
      

      【讨论】:

      • 他不想长按,他想摆脱它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多