UITableView didSelectRowAt不叫iOS 10,但适用于9.3.5

关于这个问题有很多问题,但我迄今发现的答案是不适用的。 在这种情况下,表格在iOS 9.3.5中正常工作,但不适用于iOS 10(或10.3.1)

我已经排除了:

  • 没有正确设置委托。 委托执行3个函数, didSelectRowAtheightForRowAteditActionsForRowAt后者是从右到左的滑动,可以select执行与select行完全相同的function。 。 这三个函数在v9.3.5上正常工作(通过模拟器和我testing的旧iPad)。当我通过模拟器或我的iPhone SE使用v10时, heightForRowAteditActionsForRowAt工作,但不是didSelectRowAt (对于这个问题- 我尝试了willSelectRowAt 。它也不适用于v10。)
  • 任何印刷错误(因为它适用于9.3.5)

我一直无法find关于从iOS 9到iOS 10的tableView(:didSelectRowAt)的Swift变化的任何东西。

背景

我有一个视图控制器与相应的xib(“DetailVC”)。 这个xib在标签下面有一个标签,然后是一个tableview。 表格的单元格是另一个xib。

视图控制器通过

 let uomVC = DetailVC() self.navigationController?.pushViewController(uomVC, animated: true) 

然后在DetailVC中,我使用NSFetchedDataController并通过tableView数据源委托将它连接到tableview。 (核心数据加载和显示效果很好)

代码 (我会张贴额外的代码根据需要/要求 – 斯威夫特3)

viewDidLoad() – 部分

 let nib: String = "DetailCell" let reuseID: String = "detailCell" tableView.register(UINib.init(nibName: nib, bundle: nil), forCellReuseIdentifier: reuseID) 

的tableView(:cellForRowAt)

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: reuseID) as! IngredientDetailCell cell.present(ingredient: _fetchedResultsController.object(at: indexPath)) cell.isUserInteractionEnabled = true // Added later as a guess per SO suggestions return cell } 

出于参数的缘故 – 这将不会打印

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("Selected a row") // delegate?.selectedIngredient(_fetchedResultsController.object(at: indexPath)) // self.navigationController?.popViewController(animated: true) } 

视图

tableViewCell

为了完整,以防万一有这种奇怪的情况。

问题是我的UITableViewCell xib。 我最初必须将它devise为一​​个UIView,然后添加了UITableViewCell。 层次结构应该从UITableViewCell开始。 我将UITableViewCell从视图下方移出(用红色圈起来),删除了视图并重新连接了IBOutlets。 奇怪的是它适用于iOS 9.3.5。

在这里输入图像说明