我试图制作一个表单,其中一个字段从两个级别的选项中获取价值'结果。
主要进展如下:
EditViewController
===> CategoryViewController
(由故事板嵌入在NavigationController中并弹出为模态视图)===> SubCategoryViewController
(将推送到NavigationController)。
现在我遇到了问题。用户点按以选择SubCategoryViewController
中的值后,我应该关闭SubCategoryViewController
并将值返回到EditViewController
。但我不确切知道如何。
请建议任何解决方案。
谢谢。
修改
答案 0 :(得分:2)
每个视图控制器都应该有一个公共属性,用于对表示正在编辑的内容的模型对象的弱引用。
所以每个____ ViewController.h文件都有:
@property (weak, nonatomic) CustomItem *item.
在其界面中(假设强引用位于某些数据存储或所有项的数组中)。
当EditViewController准备让segue以模态方式显示CategoryViewController时,它应该在将EditViewController的表单中输入的任何数据分配给item之后,为CategoryViewController的item属性分配相同的引用:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//TODO: assign data from controls to item, for example:
//self.item.title = self.titleField.text;
CategoryViewController *vc = (CategoryViewController *)segue.destinationViewController
vc.item = self.item; //pass the data model to the next view controller
}
同样适用于从CategoryViewController到SubCategoryViewController的segue。这可确保每个ViewController都在内存中编辑同一个对象。当您关闭SubCategoryViewController时(假设所有这些CategoryViewController中的某个位置已被解除),将在EditViewController上调用viewWillAppear:您可以刷新对项属性的模态视图中所做的任何更改,就像您第一次显示视图时一样(它实际上与调用的方法相同):
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.titleField.text = self.item.title;
self.categoryLabel.text = self.item.category;
self.subcategoryLabel.text = self.item.subcategory;
//etc....
}