gpt4 book ai didi

ios - UITableview 自定义单元格在最后重新加载,卡顿,被切成两半,并且在滚动期间不重新加载

转载 作者:行者123 更新时间:2023-11-29 02:48:59 30 4
gpt4 key购买 nike

我创建了一个带有自定义单元格的 UItableview。这些单元格有两个 UILabel 和一个在后台线程上调用图像的 ImageView 。这些单元首先加载一些占位符数据,以防 API 调用时间较长。然后,使用通知,tableview 重新加载新数据。当应用程序在 iPhone 上启动时,它会上下滚动。然而,在上下快速滚动后,单元格开始分解。有时会在当前列表下方生成一个全新的列表。其他时候,最后一个单元可能会被切成两半。这是什么原因呢?你愿意帮忙吗?非常感谢!

TableViewVC.m:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.appEntries count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

return CELL_HEIGHT;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ELAppCell *elAppCell = (ELAppCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
AppEntry *appEntry = [self.appEntries objectAtIndex:indexPath.row];

if (!elAppCell) {
elAppCell = [[ELAppCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier appEntry:appEntry];
}
else {
[elAppCell configureCellWithAppEntry:appEntry];
}
return elAppCell;
}

以及自定义单元格类:

@implementation ELAppCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier appEntry:(AppEntry *)appEntry
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {

self.appNameLabel = [self buildAppNameLabel:appEntry.name];
self.thumbnailImageView = [self buildThumbnailImageView:appEntry.smallPictureURl];
self.appArtistLabel = [self buildAppArtistLabel:appEntry.artist];

[self.contentView addSubview:self.appNameLabel];
[self.contentView addSubview:self.thumbnailImageView];
[self.contentView addSubview:self.appArtistLabel];
}
return self;
}

- (void)configureCellWithAppEntry:(AppEntry *)appEntry{

dispatch_queue_t fetchQ = dispatch_queue_create("ConfigureCell", NULL);
dispatch_async(fetchQ, ^{

NSURL *address = [NSURL URLWithString:appEntry.smallPictureURl];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:address]];
dispatch_async(dispatch_get_main_queue(), ^{

self.appNameLabel.text = appEntry.name;
self.thumbnailImageView.image = image;
self.appArtistLabel.text = [NSString stringWithFormat:@"By %@", appEntry.artist];

});
});
}

最佳答案

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"cell %ld %ld",(long)indexPath.row,(long)indexPath.section];

ELAppCell *elAppCell = (ELAppCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
elAppCell=nil;

AppEntry *appEntry = [self.appEntries objectAtIndex:indexPath.row];


if (elAppCell == nil)
{

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ELAppCell" owner:nil options:nil];

for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[MYTableViewCell class]])
{
cell = (MYTableViewCell *)currentObject;
break;
}
}


elAppCell = [[ELAppCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier appEntry:appEntry];

}
return elAppCell;

}

关于ios - UITableview 自定义单元格在最后重新加载,卡顿,被切成两半,并且在滚动期间不重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771670/

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