2

У меня есть UICollectionView внутри обычного UIViewController.Ошибка UICollectionView и прокрутки программы

Внутри коллекции я разработал многоразовый пользовательский интерфейс для коллекционных изображений в раскадровке.

Внутри коллекции коллекции есть ярлык, который отображает ячейки indexpath.row и 5 UIButtons, которые, если они выбраны, меняют цвет и остаются выбранными.

Я создал коллекционное представление, так что если запрашивается более 30 ячеек, коллекция будет горизонтально отображаться, макет коллекции также горизонтален.

Приложение работает красиво, правильно прокручивается и правильно устанавливает ячейки.

Проблема я имею, когда вы выбираете, например кнопку A в ячейке 1 в collectionviewcell (который, предполагают, чтобы макет 100 ячеек) и страницы более двух страниц (60+ клеток) на стр.3 , выбрана кнопка A в ячейке номер 75. И еще больше, если вы прокрутите до конца (100 ячеек) и прокрутите страницу назад до стр. 3, кнопка A в ячейке номер 75 на более длительное время, но кнопка A в ячейке номер 64 выбрана.

Вот некоторые фрагменты кода: cell.m - управляет действием от пользователя.

- (IBAction)bubbleButtons:(id)sender { 
    for(UIButton *bubbleCell in self.bubbleButtons) { 
      if (bubbleCell.touchInside && !bubbleCell.selected) { 
       bubbleCell.selected = YES; 
      } else if (bubbleCell.touchInside && bubbleCell.selected) { 
       bubbleCell.selected = NO; 
      } 
     } 

} 

MainViewContoller.m - устанавливает клетку из UICollectionViewCell сделана в раскадровке

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
       cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
     Cell *cell1; 
     cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID 
                 forIndexPath:indexPath]; 
     cell1.numMainLabel.text = [NSString stringWithFormat:@"%d |",indexPath.row+1]; 
     return cell1; 

Я не очень понимаю, что это неправильно или что является причиной этой ошибки, я предполагаю, что он имеет TODO с точкой зрения перезагружается, когда новая часть видимости становится видимой, но это всего лишь предположение. Помощь будет принята с благодарностью.

  • Zach

ответ

1

Это, вероятно, потому, что многоразовые точка зрения повторно.

Правильный способ сделать это - создать пользовательский многозадачный вид подкласса. И сохраните выбор этих 5 кнопок.

 cell1 =[collectionView dequeueReusableCellWithReuseIdentifier:zCellID 

Эта линия здесь может или не может дать вам новую клетку, он может дать вам ячейку, которая используется прежде. Итак, вам нужно обновить выбор. Или он остается таким же, как ячейка, которую он повторно использует.

+0

Так я должен создать собственный многоразовый вид внутри resablecell? В конечном итоге мне нужно сохранить выбранную кнопку и узнать, какая кнопка выбрана пользователем в OutletConnection UIButtons bubbleButtons. – ZBurm

+0

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

+0

Но как бы вы определили, какая кнопка из разъема outlet была выбрана, а затем сохраните этот выбор для конкретной ячейки и сохраните выбор в, возможно, словаре? Поскольку путь индекса ячейки поступает от MainViewController, как бы класс подкланов ячейки знал, в какой ячейке была выбрана кнопка? – ZBurm

0

Uicollection генерирует только те ячейки, которые были отображены в этот момент, поэтому, когда ячейка исчезла из видимого вида, ее заменили на новую.

Итак, когда вы пропустили ячейку 75 и прокрутите вниз до тех пор, пока ячейка 75 не будет видна, а затем вы прокрутите назад до ячейки 75, вы создадите новую ячейку с новой кнопкой, которая не будет пропущена, потому что новый.

Так что лет могли бы сделать, это сохранить, какие кнопки были selet, и в

- (UICollectionViewCell *) CollectionView: (UICollectionView *) CollectionView cellForItemAtIndexPath: (NSIndexPath *) indexPath

спросить кнопка Thats будет выставлялись в этот момент нужно выбрать ..

Надежда помогает его

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