UITableView didSelectRowAt不称为iOS 10,但适用于9.3.5

时间:2017-06-09 00:06:43

标签: ios swift uitableview ios10

关于这个问题有很多问题,但到目前为止我找到的答案都不适用。在这种情况下,该表在iOS 9.3.5中正常工作,但不适用于iOS 10(或10.3.1)

我排除了:

  • 未正确设置委托。该代理执行3个功能,didSelectRowAtheightForRowAteditActionsForRowAt后者是从右向左滑动,可以选择执行与选择行完全相同的功能。。这三个功能在v9.3.5上正常运行(通过模拟器测试,而旧版iPad我测试时使用。)当我通过模拟器或我的iPhone SE使用v10时,heightForRowAteditActionsForRowAt工作但是不是didSelectRowAt(就此而言 - 我尝试willSelectRowAt。它也不适用于v10。)
  • 任何印刷错误(因为它适用于9.3.5)

我无法找到关于从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。 (核心数据加载并显示效果很好。)

代码(我会根据需要/请求发布其他代码 - Swift 3)

viewDidLoad() - partial

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

1 个答案:

答案 0 :(得分:1)

为了完整,万一有人遇到这种奇怪的情况。

问题是我的UITableViewCell xib。我必须最初将它设计为UIView,然后添加UITableViewCell。层次结构应以UITableViewCell开头。我将UITableViewCell从视图下方移出(用红色圈出),删除视图并重新连接IBOutlets。它很适合iOS 9.3.5。

enter image description here