我正在尝试形成一种形式,其中一个字段从两个级别的选择结果中获取价值。
主要进展如下:EditViewController
===> CategoryViewController
(由情节提要嵌入到NavigationController中,并作为模式视图弹出)===> SubCategoryViewController
(将被推送到NavigationController)。
现在我有一个问题。用户点击以在SubCategoryViewController
中选择一个值后,我应该关闭SubCategoryViewController
并将该值返回到EditViewController
。但是我不知道怎么做。
请提出任何解决方案。
谢谢。
编辑:
最佳答案
这些视图控制器中的每个视图控制器都应具有公共属性,以弱引用表示要编辑的内容的模型对象。
因此,每个____ ViewController.h文件都将具有:
@property (weak, nonatomic) CustomItem *item.
在其界面中(假设强引用位于某些数据存储区或所有项目的数组中的某个位置)。
当EditViewController准备让序列以模态显示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的设置也是如此。这样可以确保每个ViewController都在编辑内存中的相同对象。当您关闭SubCategoryViewController(假设所有CategoryViewController中的某个位置已被关闭)时,viewWillAppear:将在EditViewController上被调用-您可以在模式视图中对item属性刷新所做的任何更改,就像第一次显示视图时一样(实际上与调用的方法相同):
- (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....
}