0

我的应用程序中有一个原型表,我用一个内部带有 UITextField 的 customTableViewCell 类填充。

在我的导航栏中,我有一个保存按钮。

问题是,如何访问这个动态创建的单元格来获取 UITextField 内容?

这是我的代码,你可以看到我尝试使用 NSMutableArray

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

    customTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    [self.pfCells addObject:cell];

    if(cell == nil)
    {
        cell = [[customTableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:CellIdentifier];

    }


    // Configuration
    cell.lblName.text = [self.pfFields objectAtIndex: [indexPath row]];

    cell.txtType = [self.pfTypes objectAtIndex: [indexPath row]];

    if ([[self.pfTypes objectAtIndex:[indexPath row]] isEqualToString: @"n"]) {
        [cell.txtField setKeyboardType:UIKeyboardTypeNumberPad];
    } else if ([[self.pfTypes objectAtIndex:[indexPath row]] isEqualToString: @"m"]) {
        [cell.txtField setKeyboardType:UIKeyboardTypeEmailAddress];
    }

    return cell;
}
4

2 回答 2

0

快速回答:

#pragma mark - UITextFieldDelegate
- (void)textFieldDidEndEditing:(UITextField *)textField
{
   // grab the row we are working on
   NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

   // remove the old key/value pair if it exists and add the new one
   [self.modelDictionary removeObjectForKey:indexPath];
   [self.modelDictionary setObject:textField.text forKey:indexPath];
}

请务必cell.txtField.delegate = self在配置单元格时添加。然后在您的保存按钮中,您将遍历字典并保存值——或者只是保存字典本身。

此外,如果您的目标是 iOS6 或更高版本,则使用dequeueReusableCellWithIdentifier:forIndexPath:此方法可确保返回单元格并正确调整其大小,因此您不必检查 nil 并手动初始化单元格。

更长的答案:

您通常永远不想将模型存储在您的视图中。除了破坏 MVC 设计模式之外,它还会导致UITableViews. 具体来说, aUITableViewCell将在它滚出屏幕时被回收。因此,您在这些字段中拥有的任何值都将丢失。如果您只有从不滚动屏幕的可见行,则可以避免这样做,但我鼓励您完全避免这种方法。

相反,您应该将输入到模型对象中的文本框中的值存储起来。最简单的方法是UITextFieldDelegate's textFieldDidEndEditing:在用户输入值后使用它们来获取值,然后将这些值添加到您的模型中。您的模型可以像NSDictionary使用 indexPath 作为键一样简单。

于 2013-04-13T15:41:45.480 回答
0

这是另一种保存 UITableViewCell 中包含的 UITextField 内容的方法:

  1. tableView:cellForRowAtIndexPath 内部:设置委托和 txtField 的标签
  2. 实现 textFieldDidEndEditing:检查 UITextField 标记值并将数据保存在私有变量中
  3. 重新加载 UITableView

如果每次更改文本字段值时都不需要遍历整个 tableview,则此实现的最大优势。

于 2013-04-13T15:30:56.533 回答