UITableView didSelectRowAtIndexPath:第一次点击时未被调用

UITableView didSelectRowAtIndexPath:第一次点击时未被调用,uitableview,cocoa-touch,uikit,didselectrowatindexpath,Uitableview,Cocoa Touch,Uikit,Didselectrowatindexpath,我对UITableView的didSelectRowAtIndexPath有问题 我的表格是这样设置的,当我选择行时,它会初始化一个新的视图控制器并按下它 我第一次点击表中的任何一行时,都不会调用该方法。一旦我选择了另一行,它就开始正常工作 我通过在didselectrowatinexpath上设置断点来验证这一点。向方法添加NSLog时,我看到当我选择最后推送新视图控制器的第二行时,控制台中同时出现两条日志语句 有什么建议吗?有没有可能是您无意中键入了DIDDeselevationIndexP

我对
UITableView的
didSelectRowAtIndexPath
有问题

我的表格是这样设置的,当我选择行时,它会初始化一个新的视图控制器并按下它

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

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


有什么建议吗?

有没有可能是您无意中键入了DIDDeselevationIndexPath?

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

我甚至对发布这个答案进行了辩论,因为我认为星星的排列是为了让它自己显现出来


我有一个变化的这个问题,并已检查了其他解决方案。在我的表格视图中,它不会在第一次点击时处理表格的最后一行。它高亮显示它,但未调用
didSelectRowAtIndexPath
。所有其他行都可以正常工作。但是,如果我打开tableview反弹,那么它似乎可以解决问题(但是你必须处理tableview反弹)。

我遇到了以下问题:

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


希望这能帮助别人检查你是否在课堂上设置了手势识别器。删除手势对我很有效。

SWIFT 2

确保将此设置为true:

self.tableView.allowssection=true


将其放在右上方,在显示该问题的单元格的
viewDidLoad()
之后和
super.viewDidLoad()

UITableViewCellSelectionStyleNone之前 (第9页)

我最后打电话来了

[tableView deselectRowAtIndexPath:indexPath animated:NO];
第一件事

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
这不一样,但已经足够好了。
让我想知道ios10带来了什么样的桌子。

SWIFT 3

如果您在非
UITableViewController
的类中使用Swift 3,并且使用的是
UITableViewDelegate
,则可能需要使用方法标题:

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

虽然我刚刚将我的项目迁移到Swift 3,但这对我来说很有效。这是相当新的,因此可能会在以后修复。

didSelectRowAt
函数在我的应用程序中未在第一次或第二次点击中调用。。。
我试图解决这个问题,却找不到任何解决办法。但突然我被认出,我正在使用view.animation颜色更改<代码>委托
方法在动画持续时未调用

SWIFT 3

其他答案在我的情况下都不起作用,但解决我问题的是:


tableView.delaysContentTouches=false

如果您在类中设置了任何UITapgestureRecognitor,则可以在didSelectRowAtIndexPath中添加此行:

[tableView deselectRowAtIndexPath:indexPath animated:NO];

这对我很有用。

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

在我的例子中,我有一个带有手势识别器的UITableView节头。点击标题时,它应该在该部分插入几行,并设置插入动画(如展开/折叠部分)。 第一次展开并点击时,没有触发didSelectRow委托方法。对于进一步的攻丝和展开/折叠操作,它按预期工作

根据我的回答,我将cancelsTouchesInView设置为false,这样就解决了问题。 t手势识别器?.cancelsTouchesInView=false

Swift 4.2

在属性检查器中禁用“延迟触地”解决了该问题。
之后,咔嗒声顺畅,并立即触发


对我有效的方法是开始键入“didSelect…”,然后让autocorrect填充其余部分。显然,我的语法有些细节是不可靠的。正如其他人所说,使用IDE

我的tableView(swift 4.2)也有同样的问题,可以通过tableView上的
allowsMultipleSelection
属性来解决

如果
allowsMultipleSelection
设置为
true
,则表视图选择机制将发生变化,通过选择每个单元格,第一次调用
tableView DidSelectRowatineXpath:
,第二次选择同一单元格,将调用
tableView DidSelectRowatineXpath:
打电话来

这意味着,如果一个单元格被点击的次数是奇数(1、3、5,…),那么将始终调用
tableView didSelectRowAtIndexPath:
,如果一个单元格被点击的次数是偶数(2、4、6,…),那么将始终调用
tableView didSelectRowAtIndexPath:

这使得
tableView didSelectRowAtIndexPath:
函数在同一单元格的第三次选择中被调用,因此结果是双击调用
didSelectRowAtIndexPath:

如果希望对单元格的每个选择调用
tableView-didSelectRowAtIndexPath:
,则必须将tableView-multipleselection设置为
false
tableView.allowsMultipleSelection=false

这样,每次点击单元格时,tableView都会选择RowatineXpath:
wil