2013-07-16 3 views
0

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

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

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

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

+0

Что такое тип данных myItem, то API ожидает NSInteger. Является ли myItem NSInteger? – Amit

+0

myItem относится к типу Item, поэтому я не могу использовать его в этом методе, но у меня нет способа взглянуть на это в коллекцию! – funkycoldmedia

ответ

0

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

У вас может быть уникальное свойство для myItem say 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 
+0

Ну такой вид делает работу, у меня есть что-то в этом роде с использованием isEqual. Я пробовал использовать доступные методы в uicollectionview, но ничего не нашел, все еще надеясь на что-то более эффективное, чем на цикл myArray (он становится довольно большим) – funkycoldmedia

+1

Чтобы упростить, вы можете иметь свойство индекса, объявленного для элемента, и установить его во время заполнения UICollectionView, Когда вы получите уведомление, вы можете просто взять индекс и получить NSIndexPath. Нет необходимости перебирать массив. – Amit

Смежные вопросы