2013-03-24 17 views
5

Ho un UICollectionView contenuto in un UIViewController che utilizza uno UICollectionViewFlowLayout orizzontale. Sto anche utilizzando una cella prototipo creata nel mio UIStoryboard. Voglio creare un cercapersone personalizzato, quindi sto usando - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset.Perché indexPathForItemAtPoint restituisce sempre nulla

Il problema è che ogni volta che sto cercando di ottenere il indexPath corrispondente a targetContentOffset (il punto nella vista di scorrimento in cui si fermerà lo scorrimento), la vista di raccolta restituisce zero anche se il punto è chiaramente all'interno della raccolta visualizza contentSize.

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

Cosa sto sbagliando?

+0

perché stai usando l'ivar? Controlla se '_collectionView' è di per sé nullo prima. – 7usam

+0

Ho provato a usare la variabile scrollView stessa ma il risultato è lo stesso. Sono positivo che entrambi non siano nulli quando chiamo il metodo. – DrMonkey68

risposta

0

La collectionView non conosce ancora indexPath per targetContentOffset.

Devi chiedere a collectionViewLayout di darti l'attributo dell'articolo che sarà layout in questa posizione.

provare qualcosa di simile:

UICollectionViewLayoutAttributes *attribute = [_collectionView.collectionViewLayout layoutAttributesForElementsInRect:(CGRect){(*targetContentOffset).x, 0, 10, self.collectionView.bounds.size.height}][0]; 
Problemi correlati