编辑表格视图单元格中文本字段的最佳方法

PaR*_*Nos 5 cocoa-touch objective-c uitableview ios

在我的应用程序中,我有一些views需要就地editable.我已经tableviewcells设置了包含一个UITextField已启用的设置,文本可以更改,这很好,它的工作原理.

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

  • 保持每个的iVar textfield.如果是的话
    • cell如果只实例化一次,如何确保每个字段都有正确的字段?
  • 有一个textfield当加入的cell创建,只是在配置时,将其值设置cell.如果是的话
    • 如何跟踪价值观?如果cell退出view然后退出,其值将重置为其原始值而不是编辑值.

您通常倾向于在这种情况下使用什么方法?特别是如果cells你正在处理大量的事情.

lna*_*ger 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];
    }
    
    Run Code Online (Sandbox Code Playgroud)


sos*_*orn 2

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