将变量传递给导航堆栈? - 苹果手机

时间:2010-08-03 15:57:28

标签: iphone objective-c xcode variables

我可以通过将视图控制器推送到导航堆栈,将变量从视图控制器传递到视图控制器。我如何做的一个例子是:

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
controller.myString = stringToPass;
[self.navigationController pushViewController:controller animated:YES];
[controller release];

但是,如果我想传递一个变量BACK UP导航堆栈怎么办?使用popViewControllerAnimated而不是pushViewController不会像我想象的那样传递变量。

我需要能够从定义的视图控制器中弹出几个弹出的变量。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

您可以使用self.navigationController获取VC堆栈中的导航控制器。你可以调用一些像

这样的方法
[self.navigationController setMyString:stringToPassUp];

还有其他几种方式,例如:用于tabbarcontroller的self.tabBarController在堆栈中,或者最简单的

[self.parentViewController setMyString:stringToPassUp];

编辑鉴于以上示例的下划线,并且没有人给出更好的解释,让我们讨论正确的方法来执行此操作。

如果你有一些对象(比如你的MyViewController *controller)并且该对象有一些东西可以告诉你,通常的做法就是这样:

  • MyViewController获取类型为delegate
  • (id)属性
  • 实例化MyViewController的视图控制器设置此委托属性,如下所示:
    controller.delegate = self;
  • 当有话要说时,MyViewController将会执行以下操作: [self.delegate delegateMessage:arg1];在你说出来时“传递信息”。

为了完美地完成这项工作,您可能需要创建自己的@protocol MyViewControllerDelegate,并通过将controller.delegate = self;放在@interface上来声明将设置<MyViewControllerDelegate>的类以采用此协议线。然后应该将MyViewController的delegate属性声明为id<MyViewControllerDelegate> delegate;,以便[self.delegate ...]消息可以与协议规范匹配。

基本上整个Cocoa Touch API都是这样的。只需浏览一下如何实现互动的想法。

答案 1 :(得分:0)

你传递的是值,而不是变量。

视图控制器不应该负责弹出自己。使用Apple的视图控制器(例如UIImagePicker),父视图控制器负责执行弹出操作;父VC也可以获得当前值。 (不完全正确;它可能在应用键盘自动完成之前访问该值)

或者,如果它是可以全局共享的值,则可以将其存储在应用程序委托中。