UICollectionView重装数据问题(UICollectionView reload dat

2019-09-02 20:08发布

我有一个使用数据重装问题UICollectionView 。 我有这样的阵列上的viewDidLoad ,以填补UICollectionView.

array = [[NSMutableArray alloc] init];
[array addObject:@"1"];
[array addObject:@"2"];
[array addObject:@"3"];
[array addObject:@"4"];
[array addObject:@"5"];
[array addObject:@"6"];

和方法:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"Cell";
    //cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    myCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 100, 20)];
    [titleLabel setText:[array objectAtIndex:indexPath.row]];
    titleLabel.textColor = [UIColor whiteColor];
    titleLabel.backgroundColor = [UIColor clearColor];
    [cell addSubview:titleLabel];

    return cell;
}

我挖掘UIButton和装载数据的:

[myCollectionView reloadData];

在此数据如何看起来像之前和重新加载后:

Answer 1:

你每次点击刷新按钮时添加一个新的标签。 您应该一次添加标签,并根据标签文本改变。

这里一个简单的例子。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    MyCell *cell = (MyCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell"
                                                                               forIndexPath:indexPath];
    [cell setMyTextLabel:indexPath.row];
    return cell;
}

在那里MyCell将包含UILabel和属性修改其文本。

我真的建议看一看乐趣UICollectionView由@Ben Scheirman代码。

希望帮助。

PS重命名myCellMyCell 。 一个类应该以大写字母开头。



Answer 2:

当你点击Reload按钮要添加标签。 在这种情况下,你一次又一次地将标签...

因此,有三种解决方案:

  • 让你的电池可重复使用
  • 在重装方法取下上海华你的细胞。
  • 您可以检查标签的text长度不等于零。 在这种情况下,没有必要添加标签和更改文本。


Answer 3:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
 {
       UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
dispatch_async(dispatch_get_main_queue(), ^{

  //  ********* Changed *******

        for (UIView *v in [cell.contentView subviews])
        [v removeFromSuperview];

 // ********** Changed **********
            if ([self.collectionviewFlow.indexPathsForVisibleItems containsObject:indexPath]) {
            NSString *img_name=[NSString stringWithFormat:@"%@_thumb%d.png",self.VaritiesName,(int)indexPath.row+1];
            imageVw=[[UIImageView alloc]initWithImage:[UIImage imageNamed: img_name]];
            imageVw.frame=CGRectMake(10,10,100,100);
            [cell.contentView addSubview:imageVw];
            }
       });
     cell.backgroundColor=[UIColor clearColor];
     return cell;
}


Answer 4:

它是晚退出,但这里是我的解决方案。

如果您使用的自定义collectionviewcell尝试使用“FUNC prepareForReuse()”



文章来源: UICollectionView reload data Issue