如何访问在UITableViewCell中输入的值?

时间:2013-04-13 14:58:46

标签: iphone ios cocoa-touch uitableview

我的应用程序中有一个原型表,我填充了一个带有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;
}

2 个答案:

答案 0 :(得分:0)

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

  1. Inside tableView:cellForRowAtIndexPath:设置委托和txtField的标签
  2. 实现textFieldDidEndEditing:检查UITextField标记值以及私有变量中的保存数据
  3. 重新加载UITableView
  4. 如果您每次更改文本字段值时都不需要遍历整个tableview,那么此实现的最大优点是。

答案 1 :(得分: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出现问题。具体来说,UITableViewCell在滚动屏幕时会被回收。因此,您在这些字段中拥有的任何值都将丢失。如果你只有可见的行从不滚动屏幕,你可以逃脱这样做,我鼓励你完全避免这种做法。

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