2013-03-24 4 views
5

У меня есть UICollectionView, содержащийся в UIViewController, который использует горизонтальный UICollectionViewFlowLayout. Я также использую прототип ячейки, созданной в моем UIStoryboard. Я хочу создать пользовательский пейджинг, поэтому я использую - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset.Почему indexPathForItemAtPoint всегда возвращает nil

Проблема заключается в том, что каждый раз, когда я пытаюсь получить indexPath, соответствующий targetContentOffset (точка в прокрутке, где прокрутка останавливается), представление коллекции возвращает нуль, хотя точка явно находится внутри коллекции просмотр содержимого.

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
{ 
    NSIndexPath *indexPath = [_collectionView indexPathForItemAtPoint:(*targetContentOffset)]; 
    // Do something with indexPath  
} 

Что я делаю неправильно?

+0

Почему Вы используете Ивар? Проверьте, является ли сам '_collectionView' первым. – 7usam

+0

Я попытался использовать переменную scrollView, но результат тот же. Я уверен, что оба они не ноль, когда я вызываю метод. – DrMonkey68

ответ

0

CollectionView еще не знает indexPath для targetContentOffset.

Вы должны попросить collectionViewLayout предоставить вам атрибут элемента, который будет размещаться в этой позиции.

попробовать что-то вроде этого:

UICollectionViewLayoutAttributes *attribute = [_collectionView.collectionViewLayout layoutAttributesForElementsInRect:(CGRect){(*targetContentOffset).x, 0, 10, self.collectionView.bounds.size.height}][0]; 
Смежные вопросы