7

UILongPressGestureRecognizer を Collection View にアタッチしました。これは、ユーザーがテーブル内のセルに指を置いて、それを削除するかどうかを尋ねられるようにするためです。

私が抱えている問題は、テーブル セルのように (indexPathForRowAtPoint を使用して) indexPath を取得できないことです。同等のものはありますか?

そうでない場合は、各セルにジェスチャを追加することを考えましたが、どのジェスチャを特定するにはどうすればよいですか (ジェスチャの「タグ」が表示されません)。たとえば、セレクターで indexPath.item を送信できますか? それとも他の方法ですか?

4

2 に答える 2

17

で同じものを手に入れましたUICollectionViewドキュメントによると:

indexPathForItemAtPoint: コレクション ビュー内の指定されたポイントにある項目のインデックス パスを返します。

  • (NSIndexPath *)indexPathForItemAtPoint:(CGPoint)point パラメータ point コレクション ビューの座標系の点。戻り値 指定したポイントにあるアイテムのインデックス パス、または指定したポイントにアイテムが見つからない場合は nil。

解説 このメソッドは、関連付けられたレイアウト オブジェクトによって提供されるレイアウト情報に依存して、どの項目にポイントが含まれているかを判断します。

提供状況 iOS 6.0 以降で利用可能です。UICollectionView.h で宣言

于 2013-07-17T10:49:48.397 に答える
3

ときどき得られる CGPoint は UIViewController 参照システムに含まれており、スクロールが関係していない限り機能することに注意してください。スクロールが必要な場合は、スクロールのオフセットを追加して、スクロール可能なビューでポイントを実際のポイントに変換する必要があります。

この例では、CGPoint は、内部に UICollectionView を含む UIViewController 全体の 3DTouch から来ています。

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
}
于 2016-10-12T15:40:08.143 に答える