gpt4 book ai didi

ios - dequeueReusableCell 导致奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 04:56:38 24 4
gpt4 key购买 nike

我正在创建一个类似于 bbc 应用程序的 iOS 应用程序- 我有一个表格 View ,有两个部分- 第一部分包含包含 ScrollView 宽图像的单元格- 第二部分包含可扩展单元格,其中包含 ScrollView 所做的图像所以问题是当我使用 dequereusable 时,它​​显示出奇怪的行为,例如当表格中最底部的单元格展开时,第一个单元格中的第一个单元格被清除等等所以我刚刚停止使用队列,一切都开始正常工作但现在,当我在滚动后添加图像时,不在 View 中的单元格会刷新并且其加载时间较长

所以请指导我如何在代码中明智地使用队列如下面所描述的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

NSString *CellIdentifier=@"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell== nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"hai"] autorelease];

///[这里为重用标识符使用了不同的名称];////

      if ([self tableView:tableView inSection2:indexPath.section]) {
Coffee *co =[appDelegate.coffeeArray2 objectAtIndex:indexPath.section-s1Count-1];
cell.textLabel.text=co.coffeeName;

}

if ([self tableView:tableView inSection1:indexPath.section]) {

Coffee *co =[appDelegate.coffeeArray1 objectAtIndex:indexPath.section];
cell.textLabel.text = co.coffeeName;
CGRect cellname = CGRectMake(5, 0, 290, 25);
UILabel *cellabel = [[[UILabel alloc] initWithFrame:cellname] autorelease];

cellabel.backgroundColor = [UIColor whiteColor];

cellabel.font = [UIFont italicSystemFontOfSize:20];

cellabel.textColor=[UIColor blueColor];

cellabel.highlightedTextColor = [UIColor clearColor];

cellabel.text=co.coffeeName;

[cell.contentView addSubview:cellabel];


}


// Configure the cell...

if ([self tableView:tableView canCollapseSection:indexPath.section])

{
if (!indexPath.row)

{

// first row

// only top row showing



if ([expandedSections containsIndex:indexPath.section])

{

cell.accessoryView = [myuicontroller accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp];

}

else

{

cell.accessoryView = [myuicontroller accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown];

}





}

else

{

// all other rows

cell.accessoryView = nil;

cell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;


CGRect cellname = CGRectMake(5, 0, 290, 25);

UILabel *cellabel = [[[UILabel alloc] initWithFrame:cellname] autorelease];

cellabel.backgroundColor = [UIColor whiteColor];

cellabel.font = [UIFont italicSystemFontOfSize:13];

cellabel.textColor=[UIColor blueColor];

cellabel.highlightedTextColor = [UIColor clearColor];

// cellabel.text =[NSString stringWithFormat:@"category"];

[cell.contentView addSubview:cellabel];

myscrollView *svb;
svb=[[myscrollView alloc]initwitharray:appDelegate.newscat1];

}else{

myscrollView *s;

NSLog(@"inside the textlabel ext%@",cell.textLabel.text);

NSLog(@"count of array %d",[appDelegate.newscat1 count]);

NSString *cat=cell.textLabel.text;

[cell.contentView addSubview:s];

}

}



return cell;

最佳答案

在将单元出队之前,您需要设置备用重用标识符。目前,无论您位于哪个部分,您都会使标识符为“cell”的单元格出列,因此您通常会为表的第 1 部分部分返回第 0 部分单元格。

因此,对代码进行分支,以便根据 indexPath.section 的值执行不同的操作:

if (indexPath.section == 0)
cellIdentifier = @"thisCell";
else
cellIdentifier = @"otherCell";

然后将您的单元格出列,如果它为零,则使用上面相同的单元格标识符变量进行创建。

您应该只在 (cell = nil) 代码中添加 subview - 否则您最终会得到具有大量重叠 subview 的单元格,并且会浪费内存。如果单元格已出列,您只需配置现有的 subview ,无需创建新的 subview 。您可以在添加 subview 时为其分配标签以协助完成此操作。

关于ios - dequeueReusableCell 导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847792/

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