添加一个UITextField,将其文本保留在UITableViewCell中

时间:2014-07-02 16:40:11

标签: ios objective-c uitableview uitextfield

如何在其中创建带有textField的UITableViewCell?我已经在StackOverflow上经历了一些类似的问题,但是我发现它们中的大部分都处理了tableView的显示总是不变的情况,并且确切地知道哪些值去了哪里。对于我的实现,每个部分的节数和行数由用户确定,可以是任何内容。我已经能够在单元格中获得textField,但是当我滚动表格并且单元格从视图中消失时,我发现输入的任何文本都丢失了。这就是我到目前为止所拥有的

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self.myTableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    UITextField *myTextField = [[UITextField alloc]
                          initWithFrame:CGRectMake(215, (cell.contentView.bounds.size.height-30)/2, 60, 30)];

    [myTextField setDelegate: self];
    myTextField.tag = indexPath.section;
    NSLog(@"%ld", (long)myTextField.tag);


    myTextField.placeholder = @"0%";
    myTextField.borderStyle = UITextBorderStyleRoundedRect;

    [cell addSubview:myTextField];

    cell.textLabel.text = self.cellLabels[indexPath.section];
    return cell;
}

我知道问题是什么,我只是想弄清楚一个解决方法。即使我以某种方式存储用户在数组中的每个textField中输入的所有内容,当它从屏幕外返回时,我不能为每个字段设置文本,因为再次调用cellForRowAtIndexPath并重新绘制textField。

这就是我想要的,功能明智的。但“Paper1”和“Paper2”可能是不同的部分......

This is pretty much what I want

1 个答案:

答案 0 :(得分:1)

使用视图模型。将每个单元格的文本存储在数组中,然后在cellForRowAtIndexpath中设置文本。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.myTableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    UITextField *myTextField = [[UITextField alloc]
                      initWithFrame:CGRectMake(215, (cell.contentView.bounds.size.height-30)/2, 60, 30)];

    [myTextField setDelegate: self];
    myTextField.tag = indexPath.section;
    NSLog(@"%ld", (long)myTextField.tag);

   myTextField.placeholder = @"0%";
   myTextField.borderStyle = UITextBorderStyleRoundedRect;
    myTextField.text = [self textForCellAtIndexPath:indexPath];
    [cell addSubview:myTextField];

    cell.textLabel.text = self.cellLabels[indexPath.section];
    return cell;

}