将 3D Touch 与故事板的 peek 和 pop 结合使用
Using 3D Touch with storyboard's peek and pop
我找到了使用 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
)。我怎样才能得到 "peeked" 单元格 indexPath 以将其传递给 segue?
或者 Storyboard 的 Peek & Pop 无法以这种简单的方式工作,我需要在我的代码中完全实现 peek & pop?
可以使用故事板和 prepareForSegue
完全实现它。您可以通过使用 sender
对象来做到这一点。
假设您已经直接从情节提要中的 table 单元格创建了 segue 到下一个视图控制器,那么发送者对象将是 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]
}
}
我找到了使用 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
)。我怎样才能得到 "peeked" 单元格 indexPath 以将其传递给 segue?
或者 Storyboard 的 Peek & Pop 无法以这种简单的方式工作,我需要在我的代码中完全实现 peek & pop?
可以使用故事板和 prepareForSegue
完全实现它。您可以通过使用 sender
对象来做到这一点。
假设您已经直接从情节提要中的 table 单元格创建了 segue 到下一个视图控制器,那么发送者对象将是 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]
}
}