UITableView didSelectRowAt 未调用 iOS 10,但适用于 9.3.5
UITableView didSelectRowAt is not called iOS 10, but works for 9.3.5
关于这个问题有很多问题,但到目前为止我找到的答案都不适用。在这种情况下,table 在 iOS 9.3.5 中可以正常工作,但不能用于 iOS 10(或 10.3.1)
我已经排除:
- 未正确设置委托。委托执行 3 个函数,
didSelectRowAt
、heightForRowAt
和 editActionsForRowAt
。 后者是从右向左轻扫,可以选择执行与选择行完全相同的功能。。这三个功能在 v9.3.5 上正常工作(通过模拟器和我测试过的更旧的 iPad 进行测试。)当我通过模拟器或我的 iPhone SE 使用 v10 时,heightForRowAt
, editActionsForRowAt
有效,但 didSelectRowAt
无效(就此而言 - 我尝试了 willSelectRowAt
。它也不适用于 v10。)
- 任何印刷错误(因为它适用于 9.3.5)
我无法找到关于 tableView(:didSelectRowAt)
从 iOS 9 到 iOS 10 的 Swift 变化的任何信息。
背景
我有一个带有相应 xib ("DetailVC") 的视图控制器。这个 xib 有一个标签,然后在标签下面有一个 tableview。 table的单元格是另一个xib。
视图控制器通过
呈现
let uomVC = DetailVC()
self.navigationController?.pushViewController(uomVC, animated: true)
然后在 DetailVC 中,我使用 NSFetchedDataController 并通过 tableView 数据源委托将其连接到 tableview。 (核心数据加载和显示效果很好。)
代码(我会 post 根据需要/请求添加代码 - Swift 3)
viewDidLoad() - 部分
let nib: String = "DetailCell"
let reuseID: String = "detailCell"
tableView.register(UINib.init(nibName: nib, bundle: nil), forCellReuseIdentifier: reuseID)
table视图(: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。我一定是最初将它设计为 UIView,然后添加了 UITableViewCell。层次结构应该以 UITableViewCell 开始。我将 UITableViewCell 从视图下方移出(以红色圈出),删除了视图并重新连接了 IBOutlets。奇怪的是它与 iOS 9.3.5.
一起使用
关于这个问题有很多问题,但到目前为止我找到的答案都不适用。在这种情况下,table 在 iOS 9.3.5 中可以正常工作,但不能用于 iOS 10(或 10.3.1)
我已经排除:
- 未正确设置委托。委托执行 3 个函数,
didSelectRowAt
、heightForRowAt
和editActionsForRowAt
。 后者是从右向左轻扫,可以选择执行与选择行完全相同的功能。。这三个功能在 v9.3.5 上正常工作(通过模拟器和我测试过的更旧的 iPad 进行测试。)当我通过模拟器或我的 iPhone SE 使用 v10 时,heightForRowAt
,editActionsForRowAt
有效,但didSelectRowAt
无效(就此而言 - 我尝试了willSelectRowAt
。它也不适用于 v10。) - 任何印刷错误(因为它适用于 9.3.5)
我无法找到关于 tableView(:didSelectRowAt)
从 iOS 9 到 iOS 10 的 Swift 变化的任何信息。
背景
我有一个带有相应 xib ("DetailVC") 的视图控制器。这个 xib 有一个标签,然后在标签下面有一个 tableview。 table的单元格是另一个xib。
视图控制器通过
呈现let uomVC = DetailVC()
self.navigationController?.pushViewController(uomVC, animated: true)
然后在 DetailVC 中,我使用 NSFetchedDataController 并通过 tableView 数据源委托将其连接到 tableview。 (核心数据加载和显示效果很好。)
代码(我会 post 根据需要/请求添加代码 - Swift 3)
viewDidLoad() - 部分
let nib: String = "DetailCell"
let reuseID: String = "detailCell"
tableView.register(UINib.init(nibName: nib, bundle: nil), forCellReuseIdentifier: reuseID)
table视图(: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。我一定是最初将它设计为 UIView,然后添加了 UITableViewCell。层次结构应该以 UITableViewCell 开始。我将 UITableViewCell 从视图下方移出(以红色圈出),删除了视图并重新连接了 IBOutlets。奇怪的是它与 iOS 9.3.5.
一起使用