【问题标题】:Identify Cell after Tap Location in UICollectionView在 UICollectionView 中点击位置后识别单元格
【发布时间】:2013-07-15 21:15:02
【问题描述】:

我已将 UILongPressGestureRecognizer 附加到集合视图,目的是让用户将手指放在表格中的单元格上并询问他们是否要删除它。

我遇到的问题是我无法像使用表格单元格(使用 indexPathForRowAtPoint)那样获取 indexPath,是否有等价物?

如果不是我考虑过将手势添加到每个单元格,那么我如何识别哪个手势(我看不到手势的“标签”),例如我可以在选择器中发送 indexPath.item 吗?还是其他方法?

【问题讨论】:

    标签: ios uicollectionview uicollectionviewcell long-press


    【解决方案1】:

    请注意,您有时获得的 CGPoint 来自 UIViewController 参考系统,只要不涉及滚动,它就可以工作。当涉及滚动时,您需要通过添加滚动的偏移量将点转换为可滚动视图中的实际点。

    在这个例子中,CGPoint 来自整个 UIViewController 中的 3DTouch,其中包含一个 UICollectionView

    public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?{
        let offsetPoint = self.musicCollectionVw.contentOffset
        let realLocation = CGPoint(x: location.x + offsetPoint.x, y: location.y + offsetPoint.y)
        if let indexPath = self.musicCollectionVw.indexPathForItem(at: realLocation){
            NSLog("Section: \(indexPath.section) Row: \(indexPath.row)")
        }
        return nil
    }
    

    【讨论】:

    • 正是我遇到的问题(但使用 Xamarin.iOS),这已经解决了这个问题。但是现在当我使用 3D Touch 时,源单元格的初始轮廓会在预览进入视图时显示。因此,希望能更清楚地说明这一点,如果我强制触摸单元格项目,预览会开始出现,但会在原始单元格在偏移之前的位置开始扩展。
    • 而且只是对我之前的评论的更新(我在发布后才解决)是,如果您在 RegisterForPreviewingWithDelegate 中注册 UICollectionView 本身,则不再需要偏移量。因此 Xamarin .iOS 代码为:RegisterForPreviewingWithDelegate(new PhotoPreviewingDelegate(this), this.CollectionView);
    • 我投了赞成票,因为您的回答使我朝着正确的方向前进,但是对我有用的是将CGPoint 从我的view 坐标转换为我的collectionView 坐标。 let actualLocation = view.convert(location, to: collectionView)
    • @MichaelPatzer 就是这个主意。寻找解决方案的路径。我也给你投票了;)
    【解决方案2】:

    UICollectionView 上也有同样的情况。根据documentation

    indexPathForItemAtPoint:返回项目所在的索引路径 集合视图中的指定点。

    • (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point 参数 point 集合视图坐标系中的一个点。返回值 项目在指定点的索引路径,如果没有项目,则为 nil 在指定点找到。

    讨论这个方法依赖于提供的布局信息 关联的布局对象以确定哪个项目包含 点。

    可用性 适用于 iOS 6.0 及更高版本。宣布于 UICollectionView.h

    【讨论】:

    • 我也尝试了 ForItem,它告诉我它没有可见界面,经过仔细检查,我发现我试图在与 UIColectionView 同名的 UIView 上执行此操作。我是个白痴,因为我没有注意到,也没有更好地命名……谢谢你的提醒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多