UICollectionView, прокрутка к элементу, не зная его NSIndexPath

У меня есть UIcollectionview, который показывает массив объектов с именем Items. В какой-то момент жизненного цикла моего приложения мне нужно переместить представление коллекции (или прокрутить его) к определенному элементу, который я получаю через NSnotification. Я не знаю NSIndexPath этого элемента, но он определенно доступен в представлении коллекции. Я попытался

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

Но это возвращает произвольное число и не имеет значения.

Как я могу это сделать?


person funkycoldmedia    schedule 16.07.2013    source источник
comment
Что такое тип данных myItem, API ожидает NSInteger. Является ли myItem NSInteger?   -  person Amit    schedule 16.07.2013
comment
myItem имеет тип Item, поэтому я не могу использовать его в этом методе, но у меня нет возможности найти его в collectionview!!   -  person funkycoldmedia    schedule 16.07.2013


Ответы (1)


Я не знаю деталей кода, поэтому я обобщаю свой ответ.

У вас может быть уникальное свойство для myItem, например ID.

Если вы поддерживаете массив элементов, например: myItemArray, и заполняете представление коллекции в том же порядке, тогда может работать следующее:

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
person Amit    schedule 16.07.2013
comment
Что ж, это работает, у меня есть что-то вроде использования isEqual. Я попытался просмотреть доступные методы в uicollectionview, но ничего не нашел, все еще надеясь на что-то более эффективное, чем цикл по myArray (он становится довольно большим) - person funkycoldmedia; 16.07.2013
comment
Чтобы сделать это проще, вы можете объявить свойство индекса для элемента и установить его при заполнении UICollectionView. Когда вы получите уведомление, вы можете просто взять индекс и получить NSIndexPath. Нет необходимости повторять массив. - person Amit; 17.07.2013