我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。

有没有人知道我到底搞砸了什么才让这一切发生的?


当前回答

确保你实现了tableView:didSelectRowAtIndexPath而不是tableView:didDeSelectRowAtIndexPath

这让我在很多场合!!

其他回答

如果你看了这个,那么问题还是没有解决。

我有自定义单元格,其中复选框“用户交互启用”是禁用的。所以,我只要打开它。祝你好运。

在这篇文章中有一些惊人的线索和答案(可能是我见过的最好的讨论之一!)这里的线索帮助我找出了我的问题,但我仍然花了很多时间在键盘上流口水,试图发现问题,这和其他帖子类似。然而,我最终发现它的方式有点不同,所以我想分享一下,以防其他人也遇到它。

事实证明,我的问题是,在代码中,一个超类添加了一个全屏的“错误视图”,它不是隐藏的,而是透明的。然而,因为它在tableview之上,“user action”被设置为YES,它拦截了我在tableview上的触摸。

我用Xcode很酷的“Debug View Hierarchy”按钮诊断了这个问题。下面是一个带有注释的屏幕截图,希望能解释我做了什么,以及我最终是如何诊断问题的。

在代码中,我只需要做:

errorMessageView.setUserInteractionEnabled = NO;
// or
errorMessageView.hidden = YES;

我刚刚找到了另一种不调用didSelect方法的方法。在某种程度上,可能是在func声明本身的一些错误中,XCode建议我将@nonobjc添加到我的方法中:

@nonobjc func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

这将继续编译没有抱怨,但你永远不会被ui动作调用。

“那是我的两分钱,我想要回我的零钱”

我也有同样的问题,

原因是使用UITapGestureRecognizer。我想让键盘在我点击其他地方时消失。我意识到这覆盖了所有的点击动作,这就是为什么,didSelectRowAtIndexPath函数没有被调用。

当我评论与UITapGestureRecognizer相关的行时,它起作用了。此外,你可以检查UITapGestureRecognizer选择器的功能,如果点击的是UITableViewCell或不是。

如果您的表视图处于编辑模式(例如。[tableView setEditing:YES animated:NO];),你需要设置tableView。allowsSelectionDuringEditing = YES;