我想获取我在预览时按下的单元格(UIViewControllerPreviewing),问题是返回方法的位置在视图上,而不是在tableview中滚动时单元格的实际位置。我试过这个:
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
let mainStoryboard: UIStoryboard = UIStoryboard(name: "TaskDetail", bundle: nil)
guard let detailViewController = mainStoryboard.instantiateViewController(withIdentifier: "DetailTaskViewController") as? DetailTaskViewController else { return nil }
guard let indexPath = self.listTasksUITableView.indexPathForRow(at: location) else { return nil }
print(indexPath.row)
}
当我实际滚动到第18行时,这将返回例如2的索引路径
答案 0 :(得分:0)
@Sulthan在评论中指出,您需要使用UIView
instance method convert(_:from:)
将坐标转换为listTasksUITableView
的“本地”坐标系。
放入此行*
let convertedLocation = listTasksUITableView.convert(location, from: self)
之前
guard let indexPath = ...
并在该行中使用convertedLocation
,而不是location
。
对于Xamarin项目,我需要一个类似的技巧,在该项目中,我正在手动计算坐标(类似于location.Y - tableView.Y
),但在滚动视图时失败了。这种转换方式确实会将滚动应用到帐户中。
*:我的Swift太生锈了,无法告诉我是否在其中放置guard
,!
等。我总是依靠编译器告诉我这一点。