如何将值传递给上一个视图控制器

时间:2014-11-18 11:31:28

标签: c# ios xamarin viewcontroller

我正在使用iOS Xamarin.IOS

开发C#个应用

我出于某种原因不使用segue。我有3 UIViewContoller。第一个UIViewController推送第二UIViewController,第二个控制器打开第三个UIViewController。当我选择一行时,我将回到第一个控制器。但此时,在第三个控制器中,我想更改第一个UIViewController的变量。

逻辑上它就像那样

  1. Controller ---> 2. controller --> 3. controller->选择一行并访问第一个控制器的变量和assign it --> 2. controller --> 1. controller并查看此变量是否发生变化 所以这个变量是null,不能改变
  2. 这是我的代码

    这是第一个控制器

    public int myVariable = 0;
    
    -----
    var controller2 =(SecondController)this.Storyboard.InstantiateViewController("SecondControllerStoryboard");
    var mynextController = new SecondController(controller2.Handle);
    NavigationController.PushViewController(mynextController, true);
    

    这是第二个控制者

    public int myVariable2=0;
    

    //这里我使用了segue

    //它会回到之前的(第一个控制器)

    NavigationController.PopViewControllerAnimated(true);
    

    这是第三个控制器

    var controller = (DocumentUpload)this.Storyboard.InstantiateViewController("FirstControllerStoryboard");
    controller.myVariable= selectedIndex;
    
    // It goes back the previous (second) controller
    NavigationController.PopViewControllerAnimated(true);
    

    所以当第一个控制器viewdidapper时,myVariable仍为null

    所以可能,在第三个控制器中,它会创建一个新实例,然后我就无法更改变量。

    我正在寻找类似桌面应用程序

    if (Application.OpenForms[i].Name)
    

    ...

2 个答案:

答案 0 :(得分:3)

你需要做的是。

((Controller)NavigationController.ViewControllers[0]).myVariable = 3;

这很有效,因为导航控制器会保留当前堆叠的所有控制器的数组。您可以使用它来访问控制器以查看后面的视图。目前的开放视图。

答案 1 :(得分:1)

虽然接受的答案可行,但请考虑其实用性。如果您需要跨多个视图控制器持久存储数据,那么这应该被抽象到一个单独的数据存储中。