我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。
有没有人知道我到底搞砸了什么才让这一切发生的?
我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。
有没有人知道我到底搞砸了什么才让这一切发生的?
当前回答
一个常见的错误是编写调用selectRowAtIndexPath或deselectRowAtIndexPath的代码,并假设该调用将触发对委托的didSelectRowAtIndexPath的调用。但事实并非如此。
selectRowAtIndexPath和deselectRowAtIndexPath的文档清楚地说明:
"这些方法不会调用委托方法 tableView:willSelectRowAtIndexPath:或tableView:didSelectRowAtIndexPath:,也不会发出通知。"
其他回答
检查你的viewController是否有以下方法:
- (BOOL) tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
如果你返回“NO”,didSelectRow将不会被调用
如果您所单击的单元格被突出显示,但函数仍然没有被调用,请再次检查函数的签名。它应该是这样的:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
我有这个问题,当我的TableViewController的类名在接口生成器中设置不正确时。
如果您有一个自定义单元格,请记住在Xib中(或通过代码)为单元格设置UserInteractionEnabled。
在我的例子中,问题是将方法声明为private。
这并没有起作用:
private func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
这工作:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {