在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath

Posted

技术标签:

【中文标题】在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath【英文标题】:UICollectionview cellForItemAtIndexPath not getting called when reload in iOS 8 【发布时间】:2015-08-15 03:44:23 【问题描述】:

我一直在努力让我的应用程序在 ios 8 上运行,并尝试使用来自 RESTful API 的数据。从网络服务获得响应后,我尝试从委托方法重新加载集合视图。我从数组中为 numberOfItemsInSection 获取有效数字计数为 5,但未调用 cellForItemAtIndexPath。

我在一种情况下看到,如果我将 numberOfItemsInSection 返回计数硬编码为 5,那么在重新加载时完美调用 cellForItemAtIndexPath。

这是我的代码 sn-p:

#pragma mark = UICollectionViewDataSource
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
     return 1; 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
     return [offerModel.arrayOffers count]; 


- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView
 cellForItemAtIndexPath:(NSIndexPath*)indexPath 
     NSString *identifier = @"OfferCell";

     static BOOL nibMyCellloaded = NO;

     if(!nibMyCellloaded)
         UINib *nib = [UINib nibWithNibName:identifier bundle: nil];
         [offerCollectionView registerNib:nib forCellWithReuseIdentifier:identifier];
         nibMyCellloaded = YES;
     

   OfferCell* cell = (OfferCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier
 forIndexPath:indexPath]; //     // Commented binding values return
 cell; 


- (void)updateOfferList
     [offerCollectionView reloadData]; 


-(void)viewDidLoad
     [offerCollectionView registerClass:[OfferCell class] forCellWithReuseIdentifier:@"OfferCell"];

     // set up delegates
     self.offerCollectionView.delegate = self;
     self.offerCollectionView.dataSource = self;   

请帮助我。快速回复最受赞赏。谢谢

【问题讨论】:

为什么不编辑您的问题以显示numberOfItemsInSection: 的代码? 您确定“我从我的 numberOfItemsInSection 数组中获得的有效数字计数为 5”?你怎么知道的? 我确实调试了数组计数并打印了计数,最初当视图加载计数时打印“0”,从 API 接收到对象后,计数打印并返回“5”。我很确定。 专家对此问题有何更新? 您确定您的collectoinView 是offercollectionview 类型吗?更进一步:你应该在你的 iboutlet 上设置委托,如果 collectionView 是你的实际 UI 项,那么你应该调用 self.collectoinView.reloadData 【参考方案1】:

我终于找到了我的拦截器的答案。我只是使用重新加载数据重新加载一些项目对我不起作用。由于 CV 默认流布局在我们强制时会执行一些内部操作以重新加载数据,就我而言,我在这里使用 customviewlayout layoutAttributesForItemAtIndexPathlayoutAttributesForElementsInRect 仅在该部分获取时调用加载。在这里它可以工作,因为 collectionView 只有一个部分,我重新加载了特定部分会使内容正确地重新加载到 CV 中。

在我的 API 处理程序委托方法中放置了以下代码 sn-p,

[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];                 
[self.collectionView reloadData];

谢谢。

【讨论】:

您在重新加载数据之前尝试过[self.collectionView.collectionViewLayout invalidateLayout] 吗?此外,请确保您在调用重新加载数据时位于主线程上。如果您不在 UI 线程上,则 CollectionView 不会按预期重新加载。 是的,我按照你的建议做了同样的事情,但对我没有帮助。

以上是关于在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

UITableviewcontroller 中的 UITableview - 重新加载时未调用 cellforrowatindexpath

iOS:首次加载时未调用 iCarousel 委托方法

iOS 5:第一次加载控制器时未调用 willRotateToInterfaceOrientation:duration

触摸时未调用 didSelectRowAtIndexPath

在 .Net Core 3.1 上发布时未使用新 ViewModel 重新加载表单

后台任务运行时未调用 iOS applicationWillEnterForeground 和黑屏