我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。
有没有人知道我到底搞砸了什么才让这一切发生的?
我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。
有没有人知道我到底搞砸了什么才让这一切发生的?
当前回答
tableView?.allowsSelection = true
在Xcode 11.7中默认为False
其他回答
在我的例子中,我在加载时动态计算TableView的SuperView的高度。由于一个错误的计算,TableView被定位在SuperView之外。TableView绘制得很好,但是所有的交互都被禁用了(并且didSelectRowAtIndexPath从未被调用)。很难检测到,因为没有视觉上的迹象表明TableView是不可访问的。
我间歇性地有这个问题。有时触摸一个单元格会导致它被选中。有时它不会接收touch事件。
我使用的是ios8中引入的一个叫做自调整单元格的功能。我看到一篇博客文章指出:
当表视图第一次显示时,您可能会发现其中的一些单元格 尺寸不合适。但当你滚动表格视图时,新的 显示的单元格具有正确的行高。为了解决这个问题, 你可以在视图出现后强制重载:
override func viewDidAppear(animated: Bool) {
tableView.reloadData()
}
这为我解决了问题。即使表视图正确呈现,触摸处理(特别是UITableView的hitTest)似乎受到上述错误的影响。
另一件可能导致问题的事情是不被选择的选择类型:
正常选择应为单选择,不应为无选择。
要以编程方式做到这一点,请执行:
tableView.allowsSelection = YES
我也有同样的问题,
原因是使用UITapGestureRecognizer。我想让键盘在我点击其他地方时消失。我意识到这覆盖了所有的点击动作,这就是为什么,didSelectRowAtIndexPath函数没有被调用。
当我评论与UITapGestureRecognizer相关的行时,它起作用了。此外,你可以检查UITapGestureRecognizer选择器的功能,如果点击的是UITableViewCell或不是。
在这种情况下,我遇到了两件事。
你可能忘了实现UITableViewDelegate协议,或者在你的类和你的表视图之间没有委托出口。 你可能有一个UIView在你的行里面,它是一个第一响应器,拿走你的点击。比如UIButton或类似的东西。