我发现了使用3D Touch的非常简单的方法——在故事板中检查"Peek&Pop"。但我正在为一个问题而挣扎。
我有UITableView,当用户触摸单元格时,我的代码一切正常:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
print(tableView.indexPathForSelectedRow)
}
}
因此,我将根据所选行在详细控制器中填充数据。但当我用Peek或Pop方法按下时,tableView.indexPathForSelectedRow
总是返回nil(嗯。我还没有选择行,我只是在预览,所以indexPath我想是nil
)。我怎样才能得到"偷看"的单元格indexPath来将其传递给segue?
或者故事板的Peek&Pop不以这种简单的方式工作,我需要完全实现peek&插入我的代码?
使用故事板和prepareForSegue
可以完全实现它。您可以通过使用sender
对象来执行此操作。
假设您已经直接从情节提要中的表单元格创建了到下一个视图控制器的segue,则sender对象的类型将为UITableViewCell
。如果以编程方式触发segue,那么只需记住在方法调用中设置sender
对象。
您可以使用此单元格从tableView
获取NSIndexPath
,类似于以下内容(忽略所有力展开,这只是为了演示目的):
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
let cell = sender as! UITableViewCell
let indexPath = tableView.indexPath(for: cell)!
if segue.identifier == "mySegue" {
let destination = segue.destination as! DetailsViewController
destination.model = self.model[indexPath.row]
}
}