5

在我的应用程序中,我有许多views需要就地的东西editable。我已经tableviewcells设置了包含UITextField启用的设置,并且可以更改文本,这很好,它可以工作。

我的问题是跟踪这些的最佳方法是什么?我是不是该 :

  • 保留每个textfield. 如果是的话
    • cell如果仅实例化一次,如何确保每个字段都具有正确的字段?
  • textfield在创建时添加一个cell,并在配置时简单地设置它的值cell。如果是的话
    • 我如何跟踪这些值?如果cell退出view然后返回,则其值将重置为其原始值,而不是编辑后的值。

对于这种情况,您通常倾向于使用什么方法?cells特别是如果您正在处理大量此类问题。

4

3 回答 3

10
  1. 将所有文本字段的值存储在数据模型中的可变数组中。

  2. tableView:willDisplayCell:forRowAtIndexPath:设置文本字段的值时,使用基于索引路径的数组中的值。

  3. 当文本字段结束编辑时,立即将值存储回数组中。已经有一个协议(所以不需要自己编写),但它比正常的有点棘手,因为你没有得到 indexPath 并且需要找到与你的文本字段关联的那个:

    - (void) textFieldDidEndEditing:(UITextField *)textField {
        CGRect location = [self convertRect:textField.frame toView:self.tableView];
        NSIndexPath *indexPath = [[self.tableView indexPathsForRowsInRect:location] objectAtIndex:0];
    
        // Save the contents of the text field into your array:
        [yourArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
    }
    
于 2013-01-16T06:15:54.960 回答
3
  • 子类 UITableViewCell 并在它的 init 方法中添加一个 UITextField 。

  • 为自定义单元类创建协议。当 UITextField 开始编辑或结束编辑时调用委托的方法。

  • 在控制器中,实现自定义单元格的协议并将 indexpath 行值设置为 tableView:cellForRowAtIndexPath 中的单元格标记:

所以每次编辑 UITextField 时,您都可以在控制器中知道正在编辑哪一行(通过单元格的标签)

于 2013-01-16T05:42:20.920 回答
2

最好的方法是遵循 MVC 并实现您的模型,在您的情况下是文本字段值。您所做的是将这些值存储在一个数组中,并在您的 cellForIndexPath 方法中引用数组中的正确值。例如,表的第一行 (indexPath.row == 0) 将检索数组中的第一个元素。textField 中的更改将记录在数组中的相应元素上。

于 2013-01-16T05:10:05.607 回答