向下滚动时UITableViewCell中的文本丢失

时间:2009-09-16 10:19:19

标签: iphone uitableview scroll

我在tableview中添加了几个单元格,每个单元格右侧都有一个textField,用户可以输入文本。我发现当我向下滚动并返回时,前几行的输入将消失。有人知道这是什么问题吗?

以下是我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
    *)indexPath
        {
            //init cell
            static NSString *TableIdentifier = @"MyIdentifier";
            UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:TableIdentifier];
            if(cell == nil) {
                cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
                                        reuseIdentifier:TableIdentifier] autorelease];
            }

            //set cell for each row
            if([indexPath row] == 0)
            {
                cell.textLabel.text = @"Row A";
                txt_A = [self CreateTextField];         //create textField
                [cell.contentView addSubview:txt_A];        //add textField to cell
            }
            else if([indexPath row] == 1)
            {
                cell.textLabel.text = @"Row B";
                    txt_B = [self CreateTextField];
                    [cell.contentView addSubview:txt_B];
            }
            else{...} }

3 个答案:

答案 0 :(得分:3)

你的意思是用户输入会消失吗?如果是这样,这可能是因为cellForRowAtIndexPath:重用了单元格并将再次执行[self CreateTextField]

因此,除非您在单元格消失之前存储用户输入,否则您的单元格将被重绘为空并重新初始化为空。

如果您确实存储了用户输入,则可以使用正确的用户输入重新初始化单元格。

答案 1 :(得分:1)

我相信当一个单元格离开屏幕时(由于滚动),iPhone立即释放它以节省内存(从而失去用户输入)。现在,当您向上滚动时,它将创建一个新单元格,其中包含旧位置的新UITextField

[self CreateTextField];

您必须分别存储每个文本字段的用户输入。例如,您可以成为文本字段的委托并捕获

- (BOOL)resignFirstResponder

在用户离开文本字段焦点时收到通知。此时,您可以假设用户已完成此特定字段并存储它。

答案 2 :(得分:1)

您可以使用方法保存用户输入:

- (void)textFieldDidEndEditing:(UITextField *)textField 

此方法调用然后用户端编辑该字段。例如,将用户输入保存到数组中。