You are not getting the cell from the tableview. So the steps are as follows:
indexPath
using the location point from UIViewControllerPreviewingDelegate
method.indexPath
to get cell from the tableView
.previewingContext
.Code Below:
In viewDidLoad
if self.traitCollection.forceTouchCapability == .available {
registerForPreviewing(with: self, sourceView: tableView)
}
In Extension:
extension ProfileViewController: UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
if let indexPath = tableView.indexPathForRow(at: location), let cell = tableView.cellForRow(at: indexPath) {
previewingContext.sourceRect = tableView.convert(cell.frame, to: self.tableView)
guard let detailViewController = storyboard?.instantiateViewController(withIdentifier: "profileDetail") as? ProfileDetailViewController else {
return nil
}
return detailViewController
}
return nil
}
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
self.navigationController?.pushViewController(viewControllerToCommit, animated: true)
}
}