当我们向上(或)向下滚动页面时,表格行中的数据会出现和消失

时间:2011-05-26 07:35:11

标签: iphone objective-c uitableview

我创建了一个分组表视图,如下图所示。但是当我们向上滚动(或)向下滚动页面时,表格行中的数据会出现和消失,当我们向上滚动时,前两行会向上(超出视图)然后如果我们向下滚动两行将采用相同的值,是这样吗?任何人都可以帮助我

This screen shot

提前致谢。

就像下面的代码我正在设计表格单元格,其中CustomCellStudentData是类我在那里创建像标签框架,文本字段框架

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    CustomCellStudentData *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    }

    switch(indexPath.section)
    {



        case 0:
            switch (indexPath.row) 
        {
            case 0:
            {

                tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(100,10, 200, 40)];
                cell.accessoryView = tfText[0];
                tfText[0].delegate=self;
                tfText[0].placeholder =@"<Student Name>";

                cell.primaryLabel.text =@"Student Name: ";

            } 
                break;
            case 1: 
            {
                tfText[1] = [[UITextField alloc] initWithFrame:CGRectMake(100,10, 200, 40)];
                cell.accessoryView = tfText[1];
                tfText[1].delegate=self;
                tfText[1].placeholder =@"<Student Age>";

                cell.primaryLabel.text =@"Student Age: ";


            } 
}
}

3 个答案:

答案 0 :(得分:1)

UITableView重用单元格,以免陷入记忆。一旦两个细胞上升,它们就会进入可重复使用的细胞池。如果池不为空,dequeueReusableCellWithIdentifier:将返回该池中的单元格(此处存在对标识符的依赖性)。由于表视图需要滚动新行的单元格,因此它从池中获取单元格并将其提供给您进行重新配置。因此,在为行0和1配置单元格时附加到单元格的文本字段仍然保留,除非您明确删除。由于我们没有获得哪些单元格,因此我们应该重置我们所做的所有自定义,并将其配置为新单元格。在这种情况下,无论进入的单元格如何,都应首先将文本字段作为附件视图删除。

答案 1 :(得分:0)

  cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];

答案 2 :(得分:0)

迪帕克说的是对的。 如果您将任何子视图添加到单元格视图,将来添加到他的答案。在添加任何内容之前从单元格中删除。使用

for(UIView * view in cell.contentView.subviews){
      [view removeFromSuperview]; view = nil;
}

在自定义单元格之前。

是的,请提高您的录取率。回到之前提出的问题并接受一些答案应该会有所帮助。