我想制作一个表格视图,其中我想要显示一些项目或图像(连续4个项目)例如:如果我有7个图像,我想在第一行显示4,在下一行显示3,如果我有13张图像,然后它应分别显示为行1,2,3,4中的4,4,4,1。我已经实现了这个,但我的问题是当我滚动表格视图时,那些图像不断改变它们的位置(从1行换到3行,反之亦然)。请告诉我一些方法,以便我的图像连续4行自动调整,如果我滚动表格视图则不会重复。
我的代码是:
(array has 7 image-datas stored in it)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 93;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Avi"];
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Avi"] autorelease];
cell.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
NSData *imageData;
for(int i=0;i<4;i++){
imageData=[array objectAtIndex:indexpath.row];
UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];
Button.frame = CGRectMake(5+(i*77), 5, 77,85);
[Button setBackgroundImage:[UIImage imageWithData:imageData] forState:UIControlStateNormal];
[cell.contentView addSubview:Button];
}
return cell;
答案 0 :(得分:1)
因此,您发布的代码段并不是特别有用,但这几乎肯定是不能正确回收表格视图的情况。
表视图'循环'它们的单元格的效率和性能 - 当单元格滚出视图时,它被标记为可循环使用:当您下次请求新单元格时,如果有可用的话,您将获得一个可回收的单元格(否则为新的单元格)将创建单元格。
如果您的所有单元格都使用相同的布局,则这不是问题。但是,如果您调整单元格的布局(就像这样),这可能会导致问题,因为您可能已经为2画面布局设置了一个单元格,并将其重新用于4画面单元格。
这里有两个选项:要么注意根据需要重置单元格(当您请求新单元格重置您创建的所有视图参数时,在您的情况下将删除所有超级视图)或创建每种布局都有不同标识符的不同单元格。
顺便说一下,看看你当前的代码,你可能想要考虑一些自定义单元格。目前,您将新图像添加到单元格的内容视图中,这意味着每次您的单元格被回收时,您永远不会删除它们,因此会添加越来越多的图像!效率很低。最好创建一个准备好四个图像视图的单元格,然后根据需要分配image
属性。