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文件的最上边声明协议如下:
1 |
@protocol PassTrendValueDelegate |
2 |
-( void )passTrendValues:( NSString *)values; //1.1定义协议与方法 |
3 |
@end |
2.继续在ViewController.h中声明一个委托变量
1 |
///1.定义向趋势页面传值的委托变量 |
2 |
@property (retain, nonatomic ) id <PassTrendValueDelegate> trendDelegate; |
3.进入ViewController.m文件在点击按钮事件函数中,设置代理
1 |
#pragma mark 点击趋势按钮 |
2 |
-( void )trendBtnClick{ |
3 |
//create the view |
4 |
TrendViewController *trendViewController = [[TrendViewController alloc] initWithNibName: @"TrendViewController" bundle: nil ]; |
5 |
6 |
self .trendDelegate=trendViewController; //设置代理 |
7 |
[ self .trendDelegate passTrendValues: @"Lves李兴乐" ]; |
8 |
//页面跳转 省 |
9 |
} |
4.进入TrendViewController.h ,引用ViewController的头文件,并添加代理协议如下:
1 |
#import "ViewController.h" |
2 |
3 |
@interface TrendViewController : UIViewController<PassTrendValueDelegate>{ |
4 |
5 |
} |
6 |
@end |
5.实现代理函数:
1 |
#pragma mark 实现传值协议方法 |
2 |
-( void )passTrendValues:( NSString *)values{ |
3 |
NSLog ( @"values:::%@" ,values); |
4 |
5 |
} |
运行一下 OK.
实现页面传值的方法还有:
1.通知
2.方法
3.代理方法
4.SharedApplication
5.NSUserdefault
6.通过一个单例的class来传递