我正在尝试通过3D触摸实现Peek&Pop功能。我正在遵循Apple Website上的指导。
它说我应该通过以下方式在准备segue方法中获取当前选定单元格的索引路径:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let selectedTableViewCell = sender as? UITableViewCell,
let indexPath = tableView.indexPath(for: selectedTableViewCell)
else { preconditionFailure("Expected sender to be a valid table view cell") }
但是,当我打电话给我时,我得到了前提条件错误。我检查了sender的值,实际上,它不是一个表格视图单元格,而是我的表格视图控制器。
当我这样获得索引路径时:
guard let indexPath = tableView.indexPathForSelectedRow else {fatalError()}
当我简单地选择表格视图单元格时它就起作用。当我尝试偷看时不起作用。它向我显示了偷看的表视图,但是它是空的。我期望如此,因为Apple文档确实提到indexPathForSelectedRow
在窥视时返回nil。
我不知道第一种方法在做什么,为什么发件人是Table View Controller而不是Table View Cell。谢谢。
答案 0 :(得分:0)
要使此代码正常工作,您必须通过 ctrl -从表格视图单元格拖动而不是从 view控制器连接segue >。
答案 1 :(得分:0)
目前尚不清楚为什么按照@vadian建议更改代码后会发生此错误。
那也是我唯一的主意。我们应该看到其余的代码,我认为那一定是一个问题。没有那个,我想没人能说很多话。
但是,我认为您可以采取一些措施(尽管这不能解决您的原始问题):
如果您按照上述的说明操作Apple教程,则已经在previewingContext(_:viewControllerForLocation:)
方法中设置了索引路径。如果可行,您也许可以在此处处理所需的数据。当您选择其他VC时,您可以使用indexPathForSelectedRow
,正如您所提到的,它在您选择时有效,但在窥视时不起作用。
没有看到其余的代码,这是我能做的最好的事情。