UICollectionView:重装数据调用numberOfItemsInSection但不调用cellForItemAtIndexPath

the*_*aju 6 objective-c ios uicollectionview

我有一个简单的UICollectionView.第一次加载视图时,将调用cellForItemAtIndexPath三次,我看到三个单元格.

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {
    NSUInteger count = ([self.results count] > 0 ? [self.results count] : 3);
    NSLog(@"count %lu", (unsigned long)count);
    return count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"cellForItemAtIndexPath called");
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"TasteCell" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor whiteColor];
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

但是,后来的self.results变成了一个包含5个元素的数组,我称之为:

[self.collectionView reloadData];
Run Code Online (Sandbox Code Playgroud)

当发生这种情况时,再次调用numberOfItemsInSection并且其中的"count"日志语句显示它返回5.但是,这次,从不调用cellForItemAtIndexPath,并且UI仍显示第一次加载的三个单元格.

为什么即使计数已更改,单元格数量仍未更新?

小智 1

尝试再次为 UICollectionView 设置数据源和委托,然后再次重新加载。

-(void)reloadCollectionView {
  mycollectionView.dataSource = self;
  mycollectionview.delegate = self;
  [mycollectionview reloadData];
}
Run Code Online (Sandbox Code Playgroud)