在iphone中创建网格表视图

在iphone中创建网格表视图,iphone,objective-c,uitableview,Iphone,Objective C,Uitableview,我想制作一个表格视图,其中我想显示一些项目或图像(一行4个项目),例如:如果我有7个图像,我想在第一行显示4个,在下一行显示3个,如果我有13个图像,那么它应该分别在第1、2、3、4行显示4、4、1。我已经做到了这一点,但我的问题是,当我滚动表格视图时,这些图像的位置不断变化(从1行移动到3行,反之亦然)。请告诉我一些方法,使我的图像自动调整自己在一行4,而不会重复,如果我滚动表视图 我的代码是: (array has 7 image-datas stored in it) - (CGFl

我想制作一个表格视图,其中我想显示一些项目或图像(一行4个项目),例如:如果我有7个图像,我想在第一行显示4个,在下一行显示3个,如果我有13个图像,那么它应该分别在第1、2、3、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;
(数组中存储了7个图像数据)
-(CGFloat)tableView:(UITableView*)表视图行高度索引路径:(NSIndexPath*)索引路径{
返回93;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节{
返回[数组计数];
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:@“Avi”];
for(UIView*cell.contentView.subview中的视图){
[视图从SuperView移除];
}
如果(单元格==nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:@“Avi”]自动释放];
cell.backgroundColor=[UIColor clearColor];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
}
NSData*图像数据;

对于(inti=0;i,所以您发布的代码片段没有特别的帮助,但这几乎肯定是没有正确回收表视图单元格的情况

表视图“回收”其单元格以提高效率和性能-当单元格滚动出视图时,它会标记为回收:当您下次请求新单元格时,如果有可用的单元格,您将获得一个回收的单元格(否则将创建一个新单元格)

如果所有单元格使用相同的布局,这不是问题。但是,如果调整单元格的布局(如您所做),这可能会导致问题,因为您可能已将单元格设置为两张图片布局,并将其循环用于四张图片的单元格

这里有两个选项:或者根据需要重置单元(当您请求一个新单元重置所有已创建的视图参数时,在您的情况下,可以通过删除所有超级视图来重置所有视图参数),或者为每个布局创建具有不同标识符的不同单元


顺便说一下,看看你当前的代码,你可能想考虑一些定制的单元格。现在你将新的图片添加到单元格的内容视图中,这意味着每次你的单元格被循环使用时,你都不会删除它们。越来越多的图片被添加了。这是非常低效的。最好创建一个有四个图像的单元格。视图已准备就绪,您只需根据需要分配
image
属性。

因此,您发布的代码片段并不是特别有用,但这几乎肯定是没有正确回收表视图单元格的情况

表视图“回收”其单元格以提高效率和性能-当单元格滚动出视图时,它会标记为回收:当您下次请求新单元格时,如果有可用的单元格,您将获得一个回收的单元格(否则将创建一个新单元格)

如果所有单元格使用相同的布局,这不是问题。但是,如果调整单元格的布局(如您所做),这可能会导致问题,因为您可能已将单元格设置为两张图片布局,并将其循环用于四张图片的单元格

这里有两个选项:或者根据需要重置单元(当您请求一个新单元重置所有已创建的视图参数时,在您的情况下,可以通过删除所有超级视图来重置所有视图参数),或者为每个布局创建具有不同标识符的不同单元


顺便说一下,看看你当前的代码,你可能想考虑一些定制的单元格。现在你将新的图片添加到单元格的内容视图中,这意味着每次你的单元格被循环使用时,你都不会删除它们。越来越多的图片被添加了。这是非常低效的。最好创建一个有四个图像的单元格。视图已准备就绪,您只需根据需要分配
图像
属性。

您是否可以编辑您的帖子,使问题清晰可见,并仅对问题的代码部分使用代码模板…完全发布您的代码(tableview单元格的声明)请编辑您的帖子,使问题清晰可见,并仅对问题的代码部分使用代码模板…完整发布您的代码(tableview单元格声明)