UITableView didSelectRowAt不叫iOS 10,但适用于9.3.5
关于这个问题有很多问题,但我迄今发现的答案是不适用的。 在这种情况下,表格在iOS 9.3.5中正常工作,但不适用于iOS 10(或10.3.1)
我已经排除了:
- 没有正确设置委托。 委托执行3个函数,
didSelectRowAt
,heightForRowAt
和editActionsForRowAt
。 后者是从右到左的滑动,可以select执行与select行完全相同的function。 。 这三个函数在v9.3.5上正常工作(通过模拟器和我testing的旧iPad)。当我通过模拟器或我的iPhone SE使用v10时,heightForRowAt
和editActionsForRowAt
工作,但不是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) }
视图
为了完整,以防万一有这种奇怪的情况。
问题是我的UITableViewCell xib。 我最初必须将它devise为一个UIView,然后添加了UITableViewCell。 层次结构应该从UITableViewCell开始。 我将UITableViewCell从视图下方移出(用红色圈起来),删除了视图并重新连接了IBOutlets。 奇怪的是它适用于iOS 9.3.5。