在UITableView中滚动时UITextField清除 - 自定义单元格

时间:2012-10-02 03:54:44

标签: iphone ios uitableview

我正在尝试从UITextField保存某些值但是,我无法做到这一点,因为每当我滚动时,UITextField中什么都没有。我正在使用自定义单元格。我知道自定义单元格必须在特定视图中加载,因此我使用textFieldDidEndEditing将值存储在数组中。但是,我收到以下错误消息: *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [__ NSArrayM insertObject:atIndex:]:object不能为nil'

非常感谢帮助!!我的代码如下,我在IOS开发中很新。

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

  if (indexPath.section == 0) {
    if (indexPath.row == 7) {
      static NSString *CellIdentifier = @"RevButtonCell";

      RevButtonCell *cell = (RevButtonCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

      if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"RevButtonCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
        [cell.revsaveB addTarget:self action:@selector(revaddparse:) forControlEvents:UIControlEventTouchUpInside];

        cell.reveditdeleteB.hidden = YES;
        cell.reveditsaveB.hidden = YES;
        cell.revsaveB.hidden = NO;
        cell.revdeleteB.hidden = NO;

      }
      return cell;
    } else {

      static NSString *CellIdentifier = @"TextCell";

      TextCell *cell = (TextCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

      if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TextCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
      }

      cell.detaillabel.text = [revdetailsA objectAtIndex:indexPath.row];

      cell.detailtext.placeholder = @"Enter Text";
      cell.detailtext.tag = indexPath.row;
      cell.detailtext.delegate = self;

      if (indexPath.row == 0) {
        cell.detailtext.text = dateS;
      }
      if (indexPath.row == 1) {
        cell.detailtext.text = clientS;
      }
      if (indexPath.row == 2) {
        cell.detailtext.text = productS;
      }
      if (indexPath.row == 3) {
        cell.detailtext.text = amountS;
      }
      if (indexPath.row == 4) {
        cell.detailtext.text = qtyS;
      }
      if (indexPath.row == 5) {
        cell.detailtext.text = taxS;
      }
      if (indexPath.row == 6) {
        cell.detailtext.text = totalS;
      }

      cell.selectionStyle = UITableViewCellSelectionStyleNone;

      return cell;
    }
  }
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
  [client insertObject:clientS atIndex:0];
  [product insertObject:productS atIndex:0];
  [date insertObject:dateS atIndex:0];
  [amount insertObject:amountS atIndex:0];
  [qty insertObject:qtyS atIndex:0];
  [tax insertObject:taxS atIndex:0];
  [total insertObject:totalS atIndex:0];
}

3 个答案:

答案 0 :(得分:0)

将空字符串的值初始化为

clientS = @"";
productS = @"";
dateS = @"";
amountS = @"";
qtyS = @"";
taxS = @"";
totalS = @"";

答案 1 :(得分:0)

只需使用每个CellIdentifier,使用CellIdentifier就像下面的那样

并且在使用此代码之后,不需要在其中创建数组和插入对象,所以不要创建数组只需使用此代码..

 NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d",indexPath.section,indexPath.row];

使用像“TextCell”和“ButtonCell”这样的另一个CellIndentifier

我希望这可以帮助你...

:)

答案 2 :(得分:0)

从您的代码看起来就像您尝试在表视图中实现静态单元格一样。您可能需要考虑的是使用故事板并创建仅使用Interface Builder支持静态表单元格的表视图。这将允许您消除整个cellForRowAtIndexPath:方法。如果你不能使用故事板,那么你必须按照你的方式管理你的单元格,但在我的书中,你可以随时删除代码。

如果你打算使用故事板,你应该知道几件事:

  • 故事板中的视图控制器需要是表视图控制器
  • 您将表格内容字段设置为“静态单元格”
  • 将要使用的文本字段拖到每个单元格中,方法是将它们拖到您添加的单元格中
  • 在视图控制器标题中创建出口,然后在界面构建器
  • 中将连接拖到它们

有一些关于使用静态单元格的表视图的教程。它们可能有点长,但是,坚持使用它们,你应该能够产生你正在寻找的结果。

最好的问候。