Определить ячейку после местоположения касания в 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
}