Search code examples
iosuicollectionviewnsindexpath

UICollectionView, scrolling to an Item without knowing its NSIndexPath


I have a UIcollectionview that shows an array of objects called Items. At one point in the lifecycle of my app I do need to move the collectionview ( or scroll it ) to a specific Item that I receive Via NSnotification. I do not know the NSIndexPath of that Item but its definitely available in the collectionview. I tried

  NSIndexPath *myIndexPath = [NSIndexPath indexPathForItem:myItem inSection:1];
  [self.collectionView scrollToItemAtIndexPath:myIndexPath  
   atScrollPosition:UICollectionViewScrollPositionCenteredVertically
                                   animated:NO];

But this gives back an arbitrary number and not relevant.

How can I do that?


Solution

  • I dont know details of code so i am generalising my answer.

    You can have a unique property for myItem say ID.

    If you are maintaining an array of items say : myItemArray, and populating collection view in same order then following can work:

    NSArray* myItemArray; //array used to populate collectionView
    NSIndexPath *myIndexPath; //this is what we need to know
    int index = 0;
    
    //myItem is object of item type & notifiedItem is notified item
    for (Item* myItem in myItemArray) {
        if (myItem.ID == notifiedItem.ID) {
             myIndexPath = [NSIndexPath indexPathForItem:index inSection:1];//you got the index path right
            break;
        }
        index++;
    }
    
    //use the index path