我正在尝试形成一种形式,其中一个字段从两个级别的选择结果中获取价值。

主要进展如下:

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

10-08 06:04