1

我有一个 UIViewController,它对 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 部分中的项目。

但是,一旦我对我的 dataStructure(section1Item、section2Items 和 section3Items)进行更改并调用 reloadData,我所有的 UICollectionView 单元格都会消失。问题的一些症状

  1. 在 reloadData 调用之后,我的 dataSource 方法都没有被调用。我尝试在 numberOfSectionsInCollectionView 和 collectionView:numberOfItemsInSection 的实现中放置一个断点,但它们没有被命中。
  2. 我尝试使用 RevealApp 进行调试,我发现在 reloadData 调用之后,我所有的 UICollectionViewCell 的隐藏属性都设置为“YES”,即使我的代码库中没有任何代码调用 .hidden = YES;
  3. 我还尝试覆盖 UICollectionViewCell#setHidden 以检测 UIKit 框架的哪个部分(如果有)调用它,并且再次没有断点触发器。

工具详情:我在 iOS7 模拟器上使用 XCode5-DP6。

更新:我的 UICollectionView 在第一次渲染时正确显示所有单元格。

4

2 回答 2

0

iOS 7 和 UICollectionView 有很多错误...在我的情况下,reloadData 无法正常工作,它会延迟工作。

于 2013-10-01T16:11:34.577 回答
0

好的,偷看,所以我能够找出问题所在。委托 (self) 是 的子类UIViewController。在 init 中,我分配self.view = viewFromStoryBoard了调用者传入 viewFromStoryBoard 的位置,以及在情节提要中设置的位置。

由于我并没有真正使用子类提供的任何功能UIViewController,因此我决定切换到子类NSObject化并手动保留指向UICollectionView.

这解决了我的问题。但是,我不是 100% 了解问题的确切性质。我猜想以某种方式覆盖 UIViewController 的视图并不是它看起来的全部。

于 2013-09-25T23:19:26.420 回答