Ios 在UICollectionViewDelegatecollectionView:didSelectItemAtIndexPath:中调用UICollectionViewreloadData将隐藏所有单元格
我有一个UIViewController,它对didSelectItemAtIndexPath具有以下实现Ios 在UICollectionViewDelegatecollectionView:didSelectItemAtIndexPath:中调用UICollectionViewreloadData将隐藏所有单元格,ios,objective-c,ios7,Ios,Objective C,Ios7,我有一个UIViewController,它对didSelectItemAtIndexPath具有以下实现 @interface id section1Item NSMutableArray *section2Items NSMutableArray *section3Items @end @implementation - (void)collectionView:(UICollectionView *)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,我的所有UICollectionView单元格就会消失。这个问题的几个症状
在重新加载数据调用之后,我的数据源方法中没有一个被调用。我尝试在numberOfSectionsInCollectionView和collectionView的实现中设置断点:numberOfItemsInSection,但它们没有被命中。
我尝试使用RevealApp进行调试,发现在重新加载数据调用后,我所有的UICollectionViewCell都将其隐藏属性设置为“是”,即使我的代码库调用中没有任何代码。hidden=YES;
我还尝试重写UICollectionViewCellsetHidden,以检测UIKit框架的任何部分调用它时会发生什么,并且再次没有断点触发器。
工具详细信息:我正在iOS7模拟器上使用XCode5-DP6
更新:我的UICollectionView在第一次渲染时正确显示了所有单元格。好的,所以我能够找出问题所在。委托self是UIViewController的一个子类。在初始化中,我分配self.view=viewFromStoryBoard,调用者在其中传入viewFromStoryBoard,并在storyboard中设置它 因为我并没有真正使用UIViewController子类提供的任何功能,所以我决定切换到NSObject子类,并手动保留指向UICollectionView的指针
这解决了我的问题。然而,我并不是百分之百地了解这个问题的确切性质。我猜,以某种方式覆盖UIViewController的视图并不是看起来的那么简单 iOS 7和UICollectionView有很多漏洞。。。在我的情况下,重新加载数据无法正常工作,它会延迟工作。如果您的数据源方法根本没有被调用,我怀疑这意味着您的collectionview本身不知何故为零。@BKC我更新了我的问题,但是collectionView是非零的,因为我的初始渲染是正确的。在另一个线程中发布了一个对我有效的解决方案-您必须提供一些关于无法正确工作的详细信息,以便其他人可以帮助您。您是否尝试在委托方法中放置断点,并查看它们是否在重新加载数据调用后被命中?这并不是真正的答案。你应该把这写下来作为评论。