滚动tableView时获取point的forPath

时间:2017-04-07 13:54:10

标签: ios swift uitableview

我想获取我在预览时按下的单元格(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的索引路径

1 个答案:

答案 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!等。我总是依靠编译器告诉我这一点。