代码之家  ›  专栏  ›  技术社区  ›  Mark Adams

uiTableView didselectrowatindexpath:第一次点击时未被调用

  •  347
  • Mark Adams  · 技术社区  · 15 年前

    我有个问题 UITableView's didSelectRowAtIndexPath .

    我的表被设置为当我选择行时,它初始化一个新的视图控制器并将其推送。

    当我第一次点击表中的任何行时,不会调用该方法。一旦我选择了另一行,它就开始正常工作了。

    我通过在上设置断点来验证这一点 didselectrowatindexpath . 添加一个 NSLog 对于这个方法,我看到当我选择最后推动新视图控制器的第二行时,两条日志语句同时出现在控制台中。

    有什么建议吗?

    12 回复  |  直到 6 年前
        1
  •  1324
  •   Ole Begemann    15 年前

    有没有可能你不小心打了 扩散系数 选择行索引路径?

        2
  •  24
  •   includeMe    12 年前

    还要检查XIB文件中表视图的选择属性。根据需要使用“单一选择”或“多重选择”。

        3
  •  17
  •   sonxurxo    10 年前

    我遇到了以下问题:

    • 第一次按入行->无效果,无选择, 从不
    • 第二次点击并跟随->正确的选择行为, 始终
      • 在我的例子中,我的错误是在Interface Builder中检查 Show selection on touch 您可以在ib中取消选中它:

        希望能帮助别人

        效果,没有选择, 从未
      • 第二次点击并跟随->纠正选择行为, 总是

      在我的例子中,我的错误是检查 Show Selection on Touch 在接口生成器中。您可以在ib中取消选中它:

      enter image description here

      希望能帮助别人

        4
  •  11
  •   YSR fan    9 年前

    检查您是否在课堂上设置了任何手势识别器。移除手势对我很有用。

        5
  •  6
  •   Chase Roberts    10 年前

    我甚至讨论过发布这个答案,因为我认为星星是为了让这个显现出来而排列的。

    我对这个问题做了一些修改,并检查了其他的解决方案。在我的表视图中,它不会在第一次点击时处理表的最后一行。它突出了它,但是 didSelectRowAtIndexPath 没有被呼叫。所有其他的行都工作正常。但是,如果我打开TableView Bounce,那么它似乎可以解决问题(但随后必须处理TableView Bounce)。

        6
  •  3
  •   Anton Tropashko    8 年前

    为显示该问题的单元格设置了UITableViewCellSelectionStyleNone (IOS9)。

    我最后打电话来了

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    

    第一件事

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    

    这不一样,但足够好。 让我想知道IO10带来了什么样的桌子破损。

        7
  •  1
  •   Lukesivi    9 年前

    斯威夫特2

    确保将此设置为“真”:

    self.tableView.allowsSelection = true

    把这个放在你的右边 viewDidLoad() 和之前 super.viewDidLoad()

        8
  •  1
  •   ZGski Adam Smith    7 年前

    斯威夫特3

    如果你在一个不是 UITableViewController 你用的是 UITableViewDelegate ,则可能需要使用方法标题:

    @objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}
    

    这对我很有用,尽管我刚把我的项目迁移到Swift3。这是相当新的,所以以后可能会修正。

        9
  •  0
  •   Diogo Martins    7 年前

    斯威夫特3

    其他的答案对我来说都不起作用,解决这个问题的方法是:

    tableView.delaysContentTouches = false

        10
  •  0
  •   garridozh    7 年前

    如果在类中设置了任何UITapGestureRecognizer,则可以在didselectRowatindexPath中添加此行:

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    

    这对我有用。

        11
  •  0
  •   Ayoub Nouri    6 年前

    当您在TableView中使用笔势识别器时,也会发生此问题。在这种情况下,您不需要删除它们,只需确保笔势属性 cancelsTouchesInView = false 这是一个布尔值,影响在识别手势时是否将触摸传递到视图。

        12
  •  0
  •   Rishil Patel Rams    6 年前

    didSelectRowAt 第一次或第二次点击时未在我的应用程序中调用函数… 我试图解决这个问题,却找不到任何解决办法。但我突然意识到,我在使用视图。动画颜色改变… Delegate 动画保持时未调用方法