Определить ячейку после местоположения касания в UICollectionView

Я прикрепил UILongPressGestureRecognizer к представлению коллекции, чтобы пользователь держал палец на ячейке таблицы и спрашивал, хотят ли они удалить его.

У меня проблема в том, что я не могу получить indexPath, как я бы с ячейкой таблицы (используя indexPathForRowAtPoint), есть ли эквивалент?

Если нет, я думал о добавлении жеста в каждую ячейку, но как мне определить, какой жест (я не вижу "тег" для жеста), например, могу ли я отправить indexPath.item в селектор? Или какой-то другой метод?

2 ответа

Решение

Вы получили то же самое на UICollectionView, Согласно документации:

indexPathForItemAtPoint: возвращает путь индекса элемента в указанной точке в представлении коллекции.

  • (NSIndexPath *) indexPathForItemAtPoint: (CGPoint) точка Параметры точка Точка в системе координат представления коллекции. Возвращаемое значение Индексный путь элемента в указанной точке или ноль, если элемент не был найден в указанной точке.

Обсуждение Этот метод использует информацию макета, предоставленную связанным объектом макета, чтобы определить, какой элемент содержит точку.

Доступность Доступно в iOS 6.0 и более поздних версиях. Объявлен в UICollectionView.h

Обратите внимание, что CGPoint, который вы иногда получаете, входит в справочную систему UIViewController и работает до тех пор, пока не задействована прокрутка. Когда используется прокрутка, вам нужно перевести точку в реальную точку в режиме прокрутки, добавив смещение прокрутки.

В этом примере CGPoint исходит из 3DTouch во всем UIViewController, который содержит 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
}
Другие вопросы по тегам