这是ios里最常用的设计模式了,简直贯穿了整个cocoa touch框架.废话不多说,直接上代码:
场景是:
A--打开--B;
B里输入数值,点击--返回--A;
A里显示B输入的值;
△在开始写之前得理清楚以下几个关系:
1:代理要做什么:
代理要修改A的值;
2:谁需要委托:
换句话说就是谁要做什么而不能做.
我们的需求是需要B返回A的时候把输入的值传递给A, 那么就是B需要委托,要传递数值给A,在A的label里显示这个数值,而它没办法去完成的;
3:谁通过代理去做:
B需要通过代理去修改A里Label的值.
4:谁委托谁去做
B委托A去修改值;
理清这几个关系后,我们的代码就可以按照这个套路去编写了:
一:代理要做什么
B.h
声明一个协议,这个代理要做的是修改Label的值;
@protocol BDelegate
<NSObject> - (void)changeLabelText: (NSString *)text; @end
二: 谁需要代理:
B需要一个代理
B.h
@property (nonatomic, assign) id<BDelegate> delegate;
三:谁通过代理去做
B.m
[self.delegate changeLabelText: textField.text];
四:做什么
A.h里加入协议
@interface A : UIViewController <BDelegate>
A.m里定义代理
B *B = [[B alloc]init];
B.delegate = self;//B的委托A去做(self即A)
A.m实现这个协议方法
- (void)changeLabelText:(NSString *)text{
self.label.text = text;//修改label的text值 text即在B里修改的值
}
That's all.
源码下载:http://vdisk.weibo.com/s/yV3nUa6epUv7x
请复制后黏贴到地址栏打开.