代码之家  ›  专栏  ›  技术社区  ›  Yunwei.W

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

  •  0
  • Yunwei.W  · 技术社区  · 11 年前

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

    主要进展如下:

    EditViewController ==> CategoryViewController (它通过故事板嵌入到NavigationController中,并作为模态视图弹出)==> SubCategoryViewController (将被推送到NavigationController)。

    现在我有个问题。用户点击选择值后 子类别视图控制器 ,我应该解雇 子类别视图控制器 并将值返回到 编辑视图控制器 。但我不知道具体怎么做。

    请提出任何解决方案。

    非常感谢。

    编辑:

    enter image description here

    1 回复  |  直到 11 年前
        1
  •  2
  •   Keith Kurak    11 年前

    这些视图控制器中的每一个都应该有一个公共属性,用于对模型对象的弱引用,该模型对象表示正在编辑的内容。

    因此,每个____ViewController.h文件将具有:

    @property (weak, nonatomic) CustomItem *item.
    

    在其接口中(假设强引用位于某个数据存储或所有项的数组中的某个位置)。

    当EditViewController准备segue以模态方式显示CategoryViewController时,它应该在将EditViewController表单中输入的任何数据分配给项后,将相同的引用分配给CategoryViewControl的项属性:

    - (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到SubCategoryViewControl的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....
    }