這是ios裏最經常使用的設計模式了,簡直貫穿了整個cocoa touch框架.廢話很少說,直接上代碼:ios
場景是:設計模式
A--打開--B;框架
B裏輸入數值,點擊--返回--A;atom
A裏顯示B輸入的值;spa
△在開始寫以前得理清楚如下幾個關係:設計
1:代理要作什麼:代理
代理要修改A的值;blog
2:誰須要委託:源碼
換句話說就是誰要作什麼而不能作.it
咱們的需求是須要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
請複製後黏貼到地址欄打開.