iOS从两级Modal视图控制器传递值

时间:2014-07-28 23:06:03

标签: ios objective-c cocoa-touch ios6 modalviewcontroller

我试图制作一个表单,其中一个字段从两个级别的选项中获取价值'结果。

主要进展如下:

EditViewController ===> CategoryViewController(由故事板嵌入在NavigationController中并弹出为模态视图)===> SubCategoryViewController(将推送到NavigationController)。

现在我遇到了问题。用户点按以选择SubCategoryViewController中的值后,我应该关闭SubCategoryViewController并将值返回到EditViewController。但我不确切知道如何。

请建议任何解决方案。

谢谢。

修改

enter image description here

1 个答案:

答案 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....
}