1

我已经分类UITableViewCell以显示从 1 到 70 的数字。在每个单元格中,我都在检查中奖号码并确定他们的背景。问题是,经过几次滚动后,tableview 变得非常缓慢,甚至无法使用。我不明白为什么,因为据我所知,我正在重复使用这些单元格。也许是因为我每次都创建 70 个 UITextFields?

请指教

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        ...

        ...

        ...

        SubCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
        if (cell == nil) {
            cell = [[SubCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"];
        }

        for(int i=0;i<7;i++)
        {
            for(int j=0;j<10;j++)
            {
                UITextField *tempField = [[UITextField alloc]initWithFrame:CGRectMake(2+(j*31), 4+(i*28), 30, 27)];
                [tempField setBorderStyle:UITextBorderStyleNone];
                [tempField setOpaque:YES];
                [tempField setTextAlignment:NSTextAlignmentCenter];
                [tempField setTextColor:[UIColor whiteColor]];
                [tempField setUserInteractionEnabled:NO];
                tempField.text = [NSString stringWithFormat:@"%d",i*10+j+1];
                if([[cell.currentWinningArray objectAtIndex:i*10+j] isEqualToString:@"0"])
                {
                   [tempField setBackground:[UIImage imageNamed:@"blue"]];
                }
                else
                    [tempField setBackground:[UIImage imageNamed:@"orange"]];

                [cell.contentView addSubview:tempField];
            }
        }
        return cell;
    }
4

1 回答 1

3

您的单元格在重用时变慢的原因是即使在重用单元格之后您仍会继续向它们添加子视图。每次创建或重用一个单元格时,您都会向其中添加 70 个子视图,但您永远不会删除这些子视图。您看不到重用单元格中的“旧”子视图,因为新添加的子视图位于它们之上,但旧的子视图仍然存在。

当单元被分配时,您只需更改代码以创建和添加子视图一次。当单元格被重用时,您应该更改视图内的值,但保持视图本身不变。

实现这一点的一种方法是给每个tempField标签一个 0 到 69 之间的标签,如下所示:

SubCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
if (cell == nil) {
    cell = [[SubCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"];
    for(int i=0;i<7;i++)
    {
        for(int j=0;j<10;j++)
        {
            UITextField *tempField = [[UITextField alloc]initWithFrame:CGRectMake(2+(j*31), 4+(i*28), 30, 27)];
            [tempField setBorderStyle:UITextBorderStyleNone];
            [tempField setOpaque:YES];
            [tempField setTextAlignment:NSTextAlignmentCenter];
            [tempField setTextColor:[UIColor whiteColor]];
            [tempField setUserInteractionEnabled:NO];
            [tempField setTag:10*i+j];
            [cell.contentView addSubview:tempField];
        }
    }
}
for(int i=0;i<7;i++)
{
    for(int j=0;j<10;j++)
    {
        UITextField *tempField = [cell subviewWithTag:10*i+j];
        tempField.text = [NSString stringWithFormat:@"%d",i*10+j+1];
        if([[cell.currentWinningArray objectAtIndex:i*10+j] isEqualToString:@"0"])
        {
           [tempField setBackground:[UIImage imageNamed:@"blue"]];
        }
        else
        {
           [tempField setBackground:[UIImage imageNamed:@"orange"]];
        }
    }
}
return cell;
于 2013-07-14T11:28:02.543 回答