2013-09-24 2 views
1

У меня есть UIViewController, который имеет следующую реализацию для didSelectItemAtIndexPathВызов UICollectionView # reloadData в UICollectionViewDelegate # CollectionView: didSelectItemAtIndexPath: скрывает все клетки

@interface 

id section1Item 
NSMutableArray *section2Items 
NSMutableArray *section3Items 

@end 

@implementation 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 

    if (indexPath.section == 0) { 

     ; 

    } else if (indexPath.section == 1) { 

     self.section1Item = [self.section2Items objectAtIndex:indexPath.row]; 

    } else { // indexPath.section == 2 

     id newSection2Item = [self.section3Items objectAtIndex:indexPath.row]; 

     [self.section2Items addObject:newSection2Item]; 

     [self.section3Items removeObject:newSection2Item]; 

    } 


    [collectionView reloadData]; 

} 

@end 

Идея кода является то, что мой CollectionView имеет статический ряд разделов и наклеивания на предмет в разделе 3 перемещает элемент в раздел 2, а нажатие на элемент в разделе 2 делает его предметом в разделе 1.

Однако, как только я внес изменения в свою структуру данных (section1Item, section2Items и section3Items), и вызвать reloadData, все мои UICollect ionView клетки исчезают. Несколько симптомов выпуска

  1. После вызова reloadData не удаляются мои методы dataSource. Я попытался поставить точку останова в моей реализации numberOfSectionsInCollectionView и collectionView: numberOfItemsInSection, но они не попадают.
  2. Я попытался отлаживать с помощью RevealApp, и я узнал, что после вызова reloadData у всех моих UICollectionViewCell есть их скрытое свойство, установленное в «YES», хотя у меня нет кода в моей кодовой базе, вызывающей .hidden = YES;
  3. Я также попытался переопределить UICollectionViewCell # setHidden, чтобы определить, что (если есть) часть оболочки UIKit вызывает его, и снова не было триггеров точки останова.

Информация об инструменте: Я работаю с XCode5-DP6 на симуляторе iOS7.

UPDATE: My UICollectionView отображает все ячейки правильно при первом рендеринге.

+0

i supect, если ваши методы источника данных вообще не вызываются, ваш коллекционный образ как-то ничто. – bhawesh

+0

@BKC Я обновил свой вопрос, но collectionView не равен нулю, потому что мой первоначальный рендеринг выполняется правильно. –

+0

Существует решение, размещенное в другом потоке, который работал для меня - http://stackoverflow.com/a/14804429 –

ответ

0

ОК выглядывает, поэтому я смог выяснить проблему. Делегат (сам) был подклассом UIViewController. В init я назначал self.view = viewFromStoryBoard, где viewFromStoryBoard был передан вызывающим абонентом и который был настроен в раскадровке.

Поскольку я не был на самом деле, используя любой из услуг, предлагаемых подклассу UIViewController, я решил перейти на подклассы NSObject и вручную сохранить указатель на UICollectionView.

Это исправило мою проблему. Однако я не 100% от точной природы проблемы. Я предполагаю, что переопределение представления UIViewController не так, как кажется.

0

Есть много ошибок с iOS 7 и UICollectionView ... В моем случае reloadData работает неправильно, он работает с задержкой.

+0

вам нужно будет дать еще несколько подробностей о том, что «не работает правильно», поэтому другие могут помочь вы. Попробовали ли вы установить точку останова в методах делегатов и посмотреть, попадают ли они после вызова reloadData? –

+0

На самом деле это не ответ. Вы должны написать это как комментарий. – Nico

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