使用委托在两个页面之间传递参数

使用委托在两个页面之间传递参数:

要实现的效果:

有两个View,在一个tabbar控件中

我们假定蓝颜色的为B视图,行颜色的为Y视图

我们在B试图中的输入一个字符串,然后单击B视图中的「确定]按钮,

接着单击TabBar,打开Y试图,就会发现Y试图中的第二个Lable显示的内容为我们在B视图中输入的字符串。

效果如下面两幅图片所示:

 

   

 

准备工作:

创建一个试图控制类,将其名称为BlueView,并附带创建一个对应的NIB文件,然后按照上面的图片以及下面的代码,修改Nib文件并关联相应的类

同理,添加一个背景颜色为Yellow的图片,并按照BlueViwe视图类创建的步骤,创建试图Y的Nib文件。

主要的参考代码如下所示:

 

BlueView。h

#import <UIKit/UIKit.h>

#import "myDelegate.h"

 

@interface BlueView : UIViewController 

{

id<myDelegate> valueDelegate;

IBOutlet UITextField *textInput;

}

 

@property(nonatomic,retain) id<myDelegate> valueDelegate;

@property(nonatomic,retain)  UITextField *textInput;

 

 

-(IBAction)ChangeValue:(id)sender;

-(IBAction)HideKeyBord:(id)sender;

 

@end

 

 

BlueView。m

#import "BlueView.h"

 

 

@implementation BlueView

@synthesize valueDelegate;

@synthesize textInput;

 

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}

 

- (void)viewDidUnload {

    [super viewDidUnload];

}

 

- (void)dealloc {

    [super dealloc];

}

 

//下面的代码行为添加的代码

-(IBAction)ChangeValue:(id)sender

{

    NSString * NameInput = textInput.text;

     [valueDelegate updateValue:NameInput];

    //下面的代码用来初始化Yellowview视图,这样,第一个次更新程序的时候,就能够显示数据

     UITabBarController *tabBar = (UITabBarController *)[self parentViewController];

     [tabBar setSelectedIndex:1];

     [tabBar setSelectedIndex:0];

}

 

-(IBAction)HideKeyBord:(id)sender

{

    [textInput resignFirstResponder];

}

 

 

 

YellowView。h

#import <UIKit/UIKit.h>

#import "myDelegate.h"

#import "BlueView.h"

 

@interface YellowView : UIViewController 

<myDelegate>

{

 

BlueView *myBlueView;

IBOutlet UILabel *myLable;

}

 

@property(nonatomic,retain) BlueView *myBlueView;

 

@end

 

 

#import "YellowView.h"

 

 

@implementation YellowView

@synthesize myBlueView;

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

}

 

- (void)viewDidUnload

{

    [super viewDidUnload];

}

 

 

- (void)dealloc 

{

    [super dealloc];

}

 

 

#pragma mark myDelegate

-(void)updateValue:(NSString *)NewValue

{

    myLable.text = NewValue;

}

@end

 

 

创建一个协议文件名称为: myDelegate。h

代码如下所示:

#import <UIKit/UIKit.h>

 

 

@protocol myDelegate

@optional

 

-(void)updateValue:(NSString *)NewValue;

 

@end

 

 

下面的代码行是关键的地方:

NSMutableArray *localViewController = [[NSMutableArray alloc] init];

BlueView * bluev =[[BlueView alloc] init];

bluev.title =@"myBlueView";

[localViewController addObject:bluev];

YellowView  *yv = [[YellowView alloc]init];

bluev.valueDelegate = yv;//关键中的关键的地方

yv.myBlueView = bluev;//关键中的关键的地方  该行代码和上面的一行才是关键的地方

yv.title = @"myYellowView";

[localViewController addObject:yv];

 

self.viewControllers = localViewController;

[localViewController release];

[bluev release];

[yv release];

 

 

之所以写这些方面的资料,主要是因为前面也看到别人的写的一片博客将的是使用委托传递参数,可是后来发现使用起来有一定的局限性,然后参考别人写的代码,写下了这篇文章作为自己学习的脚印。。。

 

 

THE END !

日期:2011-07-05

执笔于:Biejing

 

 

 

原文地址:https://www.cnblogs.com/xingchen/p/2098412.html