ios - indexPathForRow 不会返回正确的值

标签 ios swift swift3

我正在尝试使用 3D Touch,一切都很好,除了下面的函数,我无法使用 indexPathForRow(at: location) 获得正确的值 indexPath当我滚动时。此函数无法说明用户是否滚动表格,并且始终将用户在应用中可以看到的第一行设置为第一行。

我的代码:

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

        guard let indexPath = workoutTable?.indexPathForRow(at: location) else {return nil }
        guard let cell = workoutTable?.cellForRow(at: indexPath) else {return nil }
        guard let workoutDetailPeek = storyboard?.instantiateViewController(withIdentifier: "WorkoutDetailPeek") as? WorkoutDetailPeek else {print("else31"); return nil }

        workoutDetailPeek.workoutId = "\(Int(workout[(indexPath as NSIndexPath).row].workoutId)!-2)"
        workoutDetailPeek.preferredContentSize = CGSize(width: 400.0, height: 267.0)
        previewingContext.sourceRect = cell.frame
        return workoutDetailPeek
}

我经历过不同的 3D Touch 实现,但这个功能似乎对除我以外的所有人都适用。

最佳答案

在 iOS 中,每个 View 都有 2 个坐标系,一个是自己的,另一个是父 View 的。 View 的坐标系几乎总是在 View 的左上角有 0,0。该点可能位于其父 View 坐标系中 0,0 以外的某个位置。

当你得到一个点时,你需要知道它在谁的坐标系中表示。UIView 中有各种方法可以让你在坐标系之间转换点。

为了让您的代码正常工作,您需要知道该点在哪个 View 的坐标系中表示。由于您正在表格 View 中搜索单元格,因此使用表格 View 的坐标系将是一个合理的选择。

我还没有为 3D 触摸设备开发过,所以我不熟悉你正在使用的功能。您传递给它的点来自哪里,它在什么坐标系中表示?

关于ios - indexPathForRow 不会返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41332927/

相关文章:

ios - AVSpeechUtterance en-US 语音在 iOS 12 上听起来乱码

ios - 当 "Hide Bottom Bar on Push"对于来自 Cell 的 segue 为真时,UITableView 跳转到顶部显示 SearchBar

ios - 如果我们更改 UITextField 中的文本,如何更新 UIStepper 值?

ios - 动画按钮图像时 UIButton 文本不可见

android - 如何修复此问题 : Object are not valid as a React Child

iphone - 自定义分隔符图像在 UItableviewcell 中消失

ios - 是否可以缓存视频? IOS- swift

swift - 带有 `isActive=true` 的嵌套导航链接未正确显示

ios - 对齐来自 Swift 3 中不同单元格的按钮

ios - 将进度条添加到 UIAlertController 并显示更新