gpt4 book ai didi

ios - 滚动 UICollectionView 时加载重复数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:00:59 26 4
gpt4 key购买 nike

您好,我是 iOS 的初学者,在我的项目中,我以编程方式创建了 UICollectionView,可以正常工作。

但我的问题是当我滚动 CollectionView 时,重复数据正在加载,如下面的屏幕所示。

我哪里做错了?

为什么滚动 CollectionView 时会加载重复数据?

请帮帮我。

我的代码:-

#import "ViewController.h"

@interface ViewController ()
{
UICollectionView *_collectionView;
NSArray * images;
NSArray * description;

UILabel * NameLabel;
UIImageView *image;
}

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

images = [NSArray arrayWithObjects:@"angry_birds_cake.jpg", @"creme_brelee.jpg", @"egg_benedict.jpg", @"full_breakfast.jpg", @"green_tea.jpg", @"ham_and_cheese_panini.jpg", @"ham_and_egg_sandwich.jpg", @"hamburger.jpg", @"instant_noodle_with_egg.jpg", @"japanese_noodle_with_pork.jpg", @"mushroom_risotto.jpg", @"noodle_with_bbq_pork.jpg", @"starbucks_coffee.jpg", @"thai_shrimp_cake.jpg", @"vegetable_curry.jpg", @"white_chocolate_donut.jpg", nil];
description = [NSArray arrayWithObjects:@"angry_birds_cake.jpg", @"creme_brelee.jpg", @"egg_benedict.jpg", @"full_breakfast.jpg", @"green_tea.jpg", @"ham_and_cheese_panini.jpg", @"ham_and_egg_sandwich.jpg", @"hamburger.jpg", @"instant_noodle_with_egg.jpg", @"japanese_noodle_with_pork.jpg", @"mushroom_risotto.jpg", @"noodle_with_bbq_pork.jpg", @"starbucks_coffee.jpg", @"thai_shrimp_cake.jpg", @"vegetable_curry.jpg", @"white_chocolate_donut.jpg", nil];

UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];

_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, 320, 480) collectionViewLayout:layout];

[_collectionView setDataSource:self];
[_collectionView setDelegate:self];

[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];

[_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView"];

[_collectionView setBackgroundColor:[UIColor clearColor]];
self.view.backgroundColor = [UIColor whiteColor];

[self.view addSubview:_collectionView];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

return images.count;
}

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


UICollectionViewCell *cell;

if (cell == nil) {
cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];

image =[[UIImageView alloc]init];
[cell.contentView addSubview:image];

NameLabel = [[UILabel alloc]init];
NameLabel.textColor = [UIColor blackColor];
NameLabel.font = [UIFont systemFontOfSize:15.0];
[cell.contentView addSubview:NameLabel];

[image mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(cell.contentView);
make.centerY.equalTo(cell.contentView);
make.width.equalTo(@40);
make.height.equalTo(@40);
}];

[NameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(image).offset(35);
make.left.equalTo(@5);
make.width.equalTo(@80);
make.height.equalTo(@40);
}];
}

image.image=[UIImage imageNamed:[images objectAtIndex:indexPath.row]];
NameLabel.text = [description objectAtIndex:indexPath.row];

cell.backgroundColor=[UIColor clearColor];

return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{

return CGSizeMake(70, 70);
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{

UIEdgeInsets insets=UIEdgeInsetsMake(10, 10, 10, 10);
return insets;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {

return 30.0;
}

enter image description here

最佳答案

-> 将此代码放在创建 UIImageView 对象的行上方

for (id subview in cell.contentView.subviews) {
if ([subview isKindOfClass:[UIImageView class]]) {
[subview removeFromSuperview];
} else if ([subview isKindOfClass:[UILabel class]]) {
[subview removeFromSuperview];
}
}
  • 它将删除类型为 UILabel 和 UIImageView 的内容 View 的 subview 。

使用标签:

根据您的代码将标签添加到 View 对于 UIImageView

self.image.tag = 101;

对于 UILabel

 self.NameLabel.tag = 102;

使用标签删除 View

//remove image view
UIView *view = [cell.contentView viewWithTag:101];
[view removeFromSuperview];

//remove label
view = [cell.contentView viewWithTag:101];
[view removeFromSuperview];

关于ios - 滚动 UICollectionView 时加载重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com