IOS 委托代理(delegate)实现页面传值

By | 2014/05/20

LvesLi原创,转载请注明原文链接谢谢  http://www.androiddev.net/lvesli_delegate/

 委托是指给一个对象提供机会对另一对象中的变化做出反应或者相应另一个对象的行为。其基本思想是协同解决问题。

在程序中:一般情况下

1.委托需要做的工作有:

     1.1定义协议与方法

    1.2声明委托变量

     1.3设置代理

     1.4通过委托变量调用委托方法

2.代理需要做的工作有:

     2.1遵循协议

     2.2实现委托方法

下面讲解一下使用委托实现页面传值的解决方法:

加入我们有两个ViewController 分别为:ViewController和 TrendViewController

一 .需求:

我们要实现这样一个功能,当点击ViewController视图上的一个按钮的时候立刻跳转到TrendViewController,并且把一个String字符串传递过去。

二.解决方案:

1.在ViewController.h文件的最上边声明协议如下:

[code lang=”objc”]
@protocol PassTrendValueDelegate
-(void)passTrendValues:(NSString *)values;//1.1定义协议与方法
@end[/code]

2.继续在ViewController.h中声明一个委托变量

[code lang=”objc”]
///1.定义向趋势页面传值的委托变量
@property (retain,nonatomic) id <PassTrendValueDelegate> trendDelegate;[/code]

3.进入ViewController.m文件在点击按钮事件函数中,设置代理

[code lang=”objc”]
#pragma mark 点击趋势按钮
-(void)trendBtnClick{
//create the view
TrendViewController *trendViewController = [[TrendViewController alloc] initWithNibName:@"TrendViewController" bundle:nil];

self.trendDelegate=trendViewController; //设置代理
[self.trendDelegate passTrendValues:@"Lves李兴乐"];
//页面跳转 省
}
[/code]


 

4.进入TrendViewController.h ,引用ViewController的头文件,并添加代理协议如下:

[code lang=”objc”]
#import "ViewController.h"

@interface TrendViewController : UIViewController<PassTrendValueDelegate>{

}
@end
[/code]

5.实现代理函数:

[code lang=”objc”]
#pragma mark 实现传值协议方法
-(void)passTrendValues:(NSString *)values{
NSLog(@"values:::%@",values);

}
[/code]

运行一下 OK.

实现页面传值的方法还有:

1.通知

2.方法

3.代理方法

4.SharedApplication

5.NSUserdefault

6.通过一个单例的class来传递

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据