gpt4 book ai didi

ios - 自定义 UITableViewCell 和慢滚动

转载 作者:行者123 更新时间:2023-11-28 20:39:08 24 4
gpt4 key购买 nike

我需要两种具有不同高度的 UITableViewCell:

a) 一个带有一个包含用户图片的小 UIImageView、3 个 UILabel 和一个 200 x 100 的 UIImageView。

b) 另一个与 a) 相同,但没有 UIImageView。

好吧,为了实现这一点,我构建了两个自定义 UITableViewCell,并设置我的 UITableView 以使用它们。

问题是当我滚动表格时,因为有时它不平滑。

我的代码如下(我只发布了 cellForRowAtIndexPath)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (.....) return HEIGHT1
else return HEIGHT2
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CheckinCellIdentifier";
static NSString *TextCellIdentifier = @"CheckinTextCellIdentifier";
CheckIn *checkin = [self.checkinArray objectAtIndex:indexPath.row];

if (checkin.photoUrl) {

CheckinUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil){
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CheckinUITableViewCell" owner:nil options:nil];

for(id currentObject in topLevelObjects) {
if([currentObject isKindOfClass:[CheckinUITableViewCell class]]) {
cell = (CheckinUITableViewCell *)currentObject;
if (self.userImage)
cell.userImage.image = self.userImage;
break;
}
}
}

cell.checkin = checkin;
UIImage *imageCheckin = [self.checkinImages objectForKey:[NSNumber numberWithInt:checkin.checkInId]];
if (imageCheckin) {
cell.checkinImage.image = imageCheckin;
} else {
CompleteBlock block = ^(NSData* imageData) {
if (imageData) {
UIImage *image = [UIImage imageWithData:imageData];
[self.checkinImages setObject:image forKey:[NSNumber numberWithInt:checkin.checkInId]];
CheckinUITableViewCell *lookedUpCell = (CheckinUITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
if (lookedUpCell){
cell.checkinImage.image = image;
//[lookedUpCell setNeedsLayout];
}
}
};
[Utility loadImageFromFile:checkin.photoPath url:checkin.photoUrl withCompletionBlock:block];
}
return cell;
} else {
CheckinTextUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TextCellIdentifier];
if (cell == nil){
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CheckinTextUITableViewCell" owner:nil options:nil];

for(id currentObject in topLevelObjects) {
if([currentObject isKindOfClass:[CheckinTextUITableViewCell class]]) {
cell = (CheckinTextUITableViewCell *)currentObject;
if (self.userImage)
cell.userImage.image = self.userImage;
break;
}
}
}
cell.checkin = checkin;
return cell;
}

}

有什么想法吗?谢谢!

最佳答案

您的代码可能存在的问题是您的 Cells 从未被重用。 NSBundle loadNibNamed:每次您的表需要时创建新的 Cell。因此,如果数据源包含 10000 条记录 - 您将创建 10000 个单元格。

请检查您是否在 xib 文件中设置了单元标识符。这将导致您的单元格出队。

关于ios - 自定义 UITableViewCell 和慢滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320439/

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