我有一个UITableViewController,在didSelectRowAtIndexPath方法中,我创建了一个UIViewController实例并将其推送到堆栈。
UIViewController用于编辑所选单元格的内容,但如何将ViewController中的更改转换回TableViewController?
干杯
答案 0 :(得分:0)
覆盖“父”或表视图控制器的-viewWillAppear:
方法,并使用[tableView reloadData];
在那里重新加载表视图数据。
当您从编辑视图控制器返回到表视图控制器时,表视图控制器的-viewWillAppear:
方法会重新加载数据,而这些数据又会调用表视图委托方法。
答案 1 :(得分:0)
你必须确保两个控制器以某种方式“共享”数据。最简单的选择是让第一个控制器传递给表中选择的数组(或只是选定的对象)。然后第二个视图将直接修改该数组(或单个对象),然后当您关闭第二个视图时将显示修改后的数据。
您可能需要重新加载表格。
有道理吗?
答案 2 :(得分:0)
将数据传递回层次结构的标准方法是使用委派,或者更简单地通过查询编辑视图控制器上的属性来获取已编辑的数据。
现在,在编辑视图控制器时,您可以将它们设计为支持直接编辑“实时”对象,或者使用允许您执行保存/取消模型的副本。
所以你想要的是编辑视图控制器编辑某种具有各种属性的ModelObject
实例。这些属性将对应于视图中的文本字段或日期选择器等。因此,您可能拥有Person
NSDate *dateOfBirth
和NSString *name
。
创建视图控制器并将其推送到导航控制器时,您可以为其中一个ModelObject
进行编辑。您可以直接从模型中传入一个对象,该对象将在用户输入值时“实时”编辑,或者可以放弃更改并实现“保存”或“取消”工作流程的副本。对于后者,您可以在推动编辑视图之前自己添加“保存”和“取消”按钮,这样您就可以自己处理操作而无需委派。
因此,当用户在文本字段中输入新值或更改日期选择器时,编辑视图控制器将设置此对象的属性。对于实时对象,这些更改将立即应用于您的模型。对于副本,当用户点击“保存”时,查询编辑视图控制器以查找传入的对象,并将其合并/复制回模型。如果用户点击取消,您只需丢弃该对象。