我有一个数组,用于在表格视图中提供自定义单元格的内容 我不知道什么是错的,但当我滚动一个tableview时,包含的单元格动态变化
请帮我解决这个问题
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
MyIdentifier = @"tblCellView";
NSString *offendersImagePath = [self applicationDocumentsDirectory];
//NSLog(@"%@", dbPath);
offendersImagePath=[offendersImagePath stringByAppendingPathComponent:@"Images"];
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = aCustomCell;
aCustomCell=nil;
}
NSMutableArray *tempArray;//=[[NSMutableDictionary alloc] init];
tempArray=[offendersNamesList objectAtIndex:indexPath.row];
//NSLog(@"%d",indexPath.row);
offendersImagePath=[offendersImagePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg",[tempArray objectAtIndex:0]]];
NSLog(offendersImagePath);
[[cell offendersImageView] setImage:[UIImage imageWithContentsOfFile:offendersImagePath]];
[cell.offendersNameLbl setText:[tempArray objectAtIndex:1]];
[cell.offendersViolation setText:[tempArray objectAtIndex:2]];
//[tempDictionary release];
//[cell setLabelText:[arryData objectAtIndex:indexPath.row]];
return cell;
}
答案 0 :(得分:1)
这类问题的典型问题是您没有在cellForRowAtIndexPath中正确设置单元格中的内容。当一个单元格滚动离开屏幕时,系统会将其转储到“回收队列”(我的术语)中。当新单元格滚动到屏幕上时,系统会在此循环队列中查找可以重复使用的单元格
((CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];)
如果没有找到它,那就从头开始构建一个全新的。在您的情况下,无论出于何种原因,您似乎没有正确设置单元格内容,并且您看到的更改是未使用正确内容更新的已回收单元格。
我不确定你到底出了什么问题,但你用于新细胞的代码有点奇怪。看起来应该更像这样:
if(cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
答案 1 :(得分:0)
我不是100%你的问题,但是如果它是具有可变文本长度的项目并且单元格上的项目没有重新调整大小,那是因为单元格中包含的标签的大小不是得到更新,只是他们的文字正在改变。
关于在cellForRowAtIndexPath中进行查找的注意事项,也许你应该在viewDidLoad中构造你的数组(对象/字典),以便提高效率。
另外需要注意的是使用.jpg文件。使用.png文件更为理想,因为它们在编译时被压缩了。
还使用NSMutableArray * tempArray;和硬编码索引是非常糟糕的做法,如果某些内容改变了数组中的位置,则意味着您必须更改所有代码。尝试使用NSDictionary,因为密钥不太可能改变。