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

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


当前回答

在我的例子中,问题是将方法声明为private。

这并没有起作用:

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

这工作:

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

其他回答

以防你和我有同样的问题 显然,如果tableView处于编辑模式,这个方法不会被调用。你必须设置allowsSelectionDuringEditing为true。

通过这个问题:编辑时,' UITableView '不调用didSelectRowAtIndexPath ??

在我的例子中,我在加载时动态计算TableView的SuperView的高度。由于一个错误的计算,TableView被定位在SuperView之外。TableView绘制得很好,但是所有的交互都被禁用了(并且didSelectRowAtIndexPath从未被调用)。很难检测到,因为没有视觉上的迹象表明TableView是不可访问的。

另一件可能导致问题的事情是不被选择的选择类型:

正常选择应为单选择,不应为无选择。

要以编程方式做到这一点,请执行:

tableView.allowsSelection = YES

另一种可能性是UITapGestureRecognizer可以吃掉事件,就像这里的情况:https://stackoverflow.com/a/9248827/214070

我没有怀疑这个原因,因为表格单元格仍然会突出显示蓝色,就像水龙头通过一样。

听起来好像这个类不是表格视图的UITableViewDelegate,尽管UITableViewController应该自动设置。

你是否有机会将委托重置为其他类?