2016-01-20 12 views
0

Я написал функцию upvote/downvote для моих клеток коллекции.Swift - CollectionView, как найти первый и последний элементы в IndexPath?

Я сравниваю переменную счета ячейки с ячейками выше и ниже нее. У меня есть функция, содержащая следующий код после приема входного сигнала.

if cell != CVcellArray.first && cell != CVcellArray.last { 
     print("NOW CHECKING IP") 
     let ip_greater = NSIndexPath(forItem: ip!.item - 1, inSection: ip!.section) 
     let ip_less = NSIndexPath(forItem: ip!.item + 1, inSection: ip!.section) 
     let cell_greater = self.collectionView?.cellForItemAtIndexPath(ip_greater) as! CollectionViewCell 
     let cell_less = self.collectionView?.cellForItemAtIndexPath(ip_less) as! CollectionViewCell 
     // recursive call to allow the cell to jump over repeat scores 
     if cell.score > cell_greater.score { 
      checkIPGreater(ip!, origIp: ip!) 
     } 
     else if cell.score < cell_less.score { 
      checkIPLesser(ip!, origIp: ip!) 
     } 
     else { 
      //do nothing 
     } 
    } 
    else { 
     print("No need to check ip") 
    } 

checkIPLesser/Greater функции, которые смотрят на повторные оценки так, что клетка может прыгать несколько пробелов, если upvoted.

Когда я выдвигаю/уменьшаю верхние/нижние ячейки ячейки, я разбился. Это я предположил, потому что стремительный пытается найти клетку, большую, чем самая большая клетка, или ниже, чем самая низкая ячейка, и она терпит неудачу. Поэтому я написал строку, которая проверила, была ли переадресация ячейки в первом массиве ячеек или в конце массива ячеек.

Несмотря на это, он все еще терпит неудачу. Я чувствую, что не правильно нахожу верхнюю или нижнюю клетки.

У меня есть один раздел с несколькими элементами внутри этого раздела (эти элементы являются ячейками). Есть ли способ получить доступ к элементам верхнего или нижнего места?

ответ

1

Я не вижу причины аварии, но так как вы разворачиваете силы ip, и вы не показали нам, откуда приходит ip, я с подозрением отношусь к этому. Если вам нужна помощь в устранении конкретной причины, это поможет, если вы отправите больше кода и трассировку стека из сбоя.

Тем не менее, я думаю, вы идете по этому пути неправильно. Вместо того, чтобы обращаться с ячейками и указательными путями, вы должны иметь дело с базовыми данными. В вашем представлении коллекции есть объект источника данных, который отвечает за заполнение ячеек, и этот источник данных, вероятно, взаимодействует с какой-то моделью данных. Количество голосов вверх и вниз - это атрибуты элементов в модели данных, и любые изменения должны решаться моделью.

Если вы реализуете такие вещи, то все, что нужно сделать вашему контроллеру просмотра коллекции, - это признать, что произошло голосование вверх или вниз, и передать эту информацию в модель. Затем модель может обновить данные и переупорядочить элементы, что может быть так же просто, как сортировка массива. Затем модель уведомляет слушателей о том, что элементы были изменены, и контроллер представления коллекции перезагрузит ячейки.

+0

Хорошо, но я не уверен, как выполнить «Модель может затем обновить данные и переупорядочить элементы». Мне нужно будет перезагрузить весь просмотр коллекции? – user3488148