我可以通过将视图控制器推送到导航堆栈,将变量从视图控制器传递到视图控制器。我如何做的一个例子是:
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
controller.myString = stringToPass;
[self.navigationController pushViewController:controller animated:YES];
[controller release];
但是,如果我想传递一个变量BACK UP导航堆栈怎么办?使用popViewControllerAnimated而不是pushViewController不会像我想象的那样传递变量。
我需要能够从定义的视图控制器中弹出几个弹出的变量。
任何帮助将不胜感激:)
答案 0 :(得分:0)
您可以使用self.navigationController获取VC堆栈中的导航控制器。你可以调用一些像
这样的方法[self.navigationController setMyString:stringToPassUp];
还有其他几种方式,例如:用于tabbarcontroller的self.tabBarController在堆栈中,或者最简单的
[self.parentViewController setMyString:stringToPassUp];
编辑鉴于以上示例的下划线,并且没有人给出更好的解释,让我们讨论正确的方法来执行此操作。
如果你有一些对象(比如你的MyViewController *controller
)并且该对象有一些东西可以告诉你,通常的做法就是这样:
delegate
(id)
属性
controller.delegate = self;
[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也可以获得当前值。 (不完全正确;它可能在应用键盘自动完成之前访问该值)
或者,如果它是可以全局共享的值,则可以将其存储在应用程序委托中。