我很难找到如何为UITableViews进行真正的数据绑定。我目前有一个表视图,其中包含许多自定义单元格,其中大部分都很简单,其中一个不是。此外,我正在重新使用单元格,因此在某些时候,来自任何给定单元格的数据可以滚动屏幕,此时数据会从UI角度丢失。我需要知道获取此信息并保存的最佳方法(最佳实践)。
我通常可以在任何给定时间显示4-5个细胞。
目前我的所有数据都是通过文本字段输入的(虽然这可能很快就会改变,因为我可能会在其中一个单元格中添加一个切换开关)。每次用户触摸文本字段时,都会调用textFieldDidEndEditing。然后,我根据文本字段中的一些信息(如标记或占位符文本)保存数据。我这样做是因为我需要获取数据并在该单元格滚出视图之前保存它,此时我无法通过从UITextField获取文本来保存数据。
我不禁相信有更好的方法可以做到这一点。我的第一个想法是找到一种方法来知道一个给定的单元格即将滚出视图(因此可能会失去它的值b / c它将被重用),并且只是在那时保存数据。我在UITableViewController,UITableView或UITableViewCell类引用中找不到任何类似的提示。所以,我猜这不是要走的路。
我的另一个想法是数据绑定,这似乎是最合适的,但我找不到任何好的例子。我需要一种方法将数据绑定到自定义对象。
例如,我有一个对象,比如说,联系人。该对象具有name的字符串字段,notes的字符串字段和具有其自己的字段集(例如,street1,street2,city,state,zip)的Address字段(另一个对象)。我想将这些值绑定到表视图,以便在编辑字段时将其保存到我的内部对象。
Q1 :有没有办法做到这一点?
仅供参考,Contact的字符串字段将共享自定义单元格类型,但地址将获得自己的自定义单元格,其中包含所有文本字段。我没有为地址中的每个字段创建不同的单元格,而是在其中包含4或5个文本字段的自定义单元格。
为了使事情进一步复杂化,我可能需要更换自定义地址单元格以匹配其他国家/地区。所以现在我需要将Address对象(ref)绑定到新的自定义地址单元格。
Q2 :这会改变上面Q1的答案吗?
同样,我正在寻找一种更好的方法来保存来自UITextFields的自定义UITableViewCells的值,我必须考虑这样的事实:数据可以滚动屏幕并重新使用一个单元格,所以不是所有的数据我当用户退出UITableView时,我可以使用need。
非常感谢任何帮助或指导。甚至只是指着一个我尚未找到的好资源。
答案 0 :(得分:1)
目前我的所有数据都是通过文本字段输入的(虽然这可能很快就会改变,因为我可能会在其中一个单元格中添加一个切换开关)。每次用户触摸文本字段时,都会调用textFieldDidEndEditing。然后,我根据文本字段中的一些信息(如标记或占位符文本)保存数据。我这样做是因为我需要获取数据并在该单元格滚出视图之前保存它,此时我无法通过从UITextField获取文本来保存数据。
我不禁相信有更好的方法可以做到这一点。
在我看来,这正是这样做的方法。视图永远不应该保存数据。结果是,只要用户编辑视图,新数据就应保存在模型中。
我的另一个想法是数据绑定,这似乎是最合适的,但我找不到任何好的例子。我需要一种方法将数据绑定到自定义对象。
Q1:有办法做到这一点吗?
不,不在iPhone上。 OS X上的Cocoa以Cocoa Bindings的形式与NSArrayController
结合使用,但iOS上没有此功能。你必须走手动路线。
答案 1 :(得分:0)
另外,我正在重复使用细胞, 所以在某些时候,来自任何给定的数据 单元格可以滚动屏幕,在 哪个点数据从UI丢失 透视图。
通常,在可编辑的详细信息视图中,无需重用UITableViewCell
个实例。如果您不是在tableView:cellForRowAtIndexPath:
中动态创建单元格,而是在Interface Builder或init...
或viewDidLoad
方法中创建单元格,则可以将它们缓存在实例变量中,这样您就不必担心用户数据会因为滚动的副作用而消失。
我想将这些值绑定到 表视图使得当一个字段 已经编辑,它保存到我的 内部对象
您应该能够使用NSKeyValueObserving
方法直接观察text
个实例的UITextField
属性的更改。您可以利用它来传播更改,但您需要在控制器(或其他地方)中实现一些自定义功能,以将文本字段绑定到关键路径。