我试图在不同视图的类之间传递变量值。 我正在使用导航控制器,通过声明属性和合成,可以将视图从一个导航控制器传递到另一个导航控制器。
但是,我不知道如何从一个视图到另一个视图,而不是堆栈中的其他视图。
例如,
FirstViewController - > SecondViewController - > ThirdViewController
这是导航控制器中的视图序列。
我想将FirstViewController中的变量值传递给ThirdViewController。
我该怎么做?
我在FirstViewController中试过类似的东西:
SecondViewController *second [SecondViewController alloc] init] autorelease];
ThirdViewController *third = [ThirdViewController alloc] init] autorelease];
third.passVariable = myVariable;
.....
[[self.navigationController pushViewController:second animated:YES];
....
我该怎么做?任何人都可以提供一些示例代码行吗?
非常感谢...
答案 0 :(得分:2)
我认为它不起作用,因为您将变量传递给第三个视图控制器,但推送第二个视图控制器。虽然创建了第三个视图控制器,但在第二个视图控制器可以推送第三个视图控制器之前,它是自动释放的。
您的方法是正确的,但您应该做的是将变量传递给第二个视图控制器,当第二个视图控制器创建第三个视图控制器时,它可以将它传递给它。
在评论后编辑
委托(您使用协议的地方)是一种将信息反馈给控制器的方法。即,如果要将信息从第三个视图控制器返回到第一个View控制器。我写了一篇simple example here。但是,要将第一个视图控制器设置为第三个视图控制器的委托,您仍然需要以与上述相同的方式将对第一个视图控制器的引用传递给堆栈。
如果您想了解如何设置单例数据源,请使用Core Data创建iOS项目,并查看模板如何设置托管对象上下文。
答案 1 :(得分:-1)
UINavigationController
有一个名为viewControllers
的属性,它是导航控制器中所有视图控制器的NSArray
。您可以使用它来访问其他控制器。
所以这样的事情可能就是你所需要的。 假设您在第三个View Controller中,并且您想在第一个中使用变量。 (并且First有一个获取变量的方法。
id obj = [[[navigationconroller viewControllers] objectAtIndex:0] getMyVar];
我没有测试过,所以它可能无法正常工作。您可能必须使用[viewcontroller performSelector:@selector(getMyVar)];
,其中viewcontroller
是从navigationcontroller.viewControllers
获取的视图控制器。
希望这是有道理的。