文本中的UITableViewCell失踪时向下滚动(Text in UITableViewCell

2019-08-06 19:03发布

我添加了几个细胞到的tableview和每个单元具有让用户输入文本右侧的文本字段。 我发现,当我向下滚动,回去,第几行的输入就会消失。 有谁知道出了什么问题?

下面是一张我的代码:

-(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{...} }

Answer 1:

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

所以,除非你存储用户输入的单元消失之前,你的细胞会被重绘空并重新初始化空。

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



Answer 2:

我相信,当一个细胞离开屏幕(由于滚动)的iPhone立即释放它以节省内存(从而失去用户输入)。 现在,当你滚动回来了,它创建了在老位置的新的UITextField用新电池

[self CreateTextField];

你必须单独存储每个文本字段的用户输入。 例如,你可以成为文本字段的委托,赶上

- (BOOL)resignFirstResponder

当用户离开文本字段焦点通知。 在这一点上,你可以假设用户完成这一特定领域和存储。



Answer 3:

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

- (void)textFieldDidEndEditing:(UITextField *)textField 

这种方法被称为然后用户端中编辑字段。 保存用户输入到阵列中,例如。



文章来源: Text in UITableViewCell missing when scroll down