我正在使用iOS
Xamarin.IOS
C#
个应用
我出于某种原因不使用segue。我有3 UIViewContoller
。第一个UIViewController
推送第二UIViewController
,第二个控制器打开第三个UIViewController
。当我选择一行时,我将回到第一个控制器。但此时,在第三个控制器中,我想更改第一个UIViewController
的变量。
逻辑上它就像那样
Controller ---> 2. controller --> 3. controller->
选择一行并访问第一个控制器的变量和assign it --> 2. controller --> 1. controller
并查看此变量是否发生变化
所以这个变量是null,不能改变这是我的代码
这是第一个控制器
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)
...
答案 0 :(得分:3)
你需要做的是。
((Controller)NavigationController.ViewControllers[0]).myVariable = 3;
这很有效,因为导航控制器会保留当前堆叠的所有控制器的数组。您可以使用它来访问控制器以查看后面的视图。目前的开放视图。
答案 1 :(得分:1)
虽然接受的答案可行,但请考虑其实用性。如果您需要跨多个视图控制器持久存储数据,那么这应该被抽象到一个单独的数据存储中。