怎么在两个ViewController之间传值

本人原创,转载请注明出处:http://iphone.xiaoxiaostudio.net   如何在ViewController之间传值,我想这是很多刚开始学习iPhone编程朋友,经常问题的一个问题。我就来总结一下吧。

一、前向传值

可以通过属性的方法来实现。举例说明,两个 ViewControllerA 和 ViewControllerB,向ViewControllerB对象传递一个BOOL值数值。 那么在ViewControllerB里添加属性
@property(nonatomic) BOOL *isSomethingEnabled;
然后在ViewControllerA中调用时,传递这个属性
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib=@"ViewControllerB" bundle=nil]; 
viewControllerB.isSomethingEnabled = YES; 
[self.navigationController pushViewController:viewControllerB animated:YES];

二、后向传值(回传值)

通过委托来实现。 1.在ViewControllerB中定义一个委托
@protocol ViewControllerBDelegate <NSObject>
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
@end
2.为ViewControllerB添加属性
@property (nonatomic, weak) id <ViewControllerBDelegate> delegate;
3.在需要传值给ViewControllerA的地方调用delegate的方法,其实,就是将事件将由delegate指定的对象来实现。 例如:ViewControllerB里面有一个按钮点击
-(void) buttonClick:(id)sender
{
NSString *itemToPassBack = @"Pass this value back to ViewControllerA";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
}
4.在ViewControllerA里实现该委托的方法
#import "ViewControllerB.h" 
@interface ViewControllerA : UIViewController <ViewControllerBDelegate>
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item 
{
 NSLog(@"This was returned from ViewControllerB %@",item); 
}
5.在生成ViewControllerB的对象时,指明该对象的Delegate是由谁来完成,这里是由ViewControllerA来实现的。
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib=@"ViewControllerB" bundle=nil];
viewControllerB.delegate = self
[[self navigationController] pushViewController:viewControllerB animated:YES];
  这样就完成了两边的交互了。    

posted on 2012-11-20 18:46  流れ星ーー  阅读(241)  评论(0编辑  收藏  举报

导航