我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。
有没有人知道我到底搞砸了什么才让这一切发生的?
我正在编写一个带有tab视图中的表视图的iOS应用程序。在我的UITableViewController中,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,该方法没有被调用。表格视图正在被填充,所以我知道控制器中的其他tableView方法正在被调用。
有没有人知道我到底搞砸了什么才让这一切发生的?
当前回答
tableView?.allowsSelection = true
在Xcode 11.7中默认为False
其他回答
另一件可能导致问题的事情是不被选择的选择类型:
正常选择应为单选择,不应为无选择。
要以编程方式做到这一点,请执行:
tableView.allowsSelection = YES
我刚刚有了这个,就像过去发生在我身上的一样,它没有工作,因为我在尝试添加方法时没有注意自动完成,我实际上最终实现了tableView:didDeselectRowAtIndexPath:而不是tableView:didSelectRowAtIndexPath:。
检查你的viewController是否有以下方法:
- (BOOL) tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
如果你返回“NO”,didSelectRow将不会被调用
好的,在这里更新,因为我刚刚遇到了这个问题,我的问题与这里发现的略有不同。
我在IB中查看,看到我的委托被设置,但它被错误地设置为视图,而不是文件的所有者(右键单击表视图,查看委托指向的位置)。
希望这能帮助到别人
在这种情况下,我遇到了两件事。
你可能忘了实现UITableViewDelegate协议,或者在你的类和你的表视图之间没有委托出口。 你可能有一个UIView在你的行里面,它是一个第一响应器,拿走你的点击。比如UIButton或类似的东西。