1. 程式人生 > >iOS 代理傳值

iOS 代理傳值

實現 weak end blog control toc bgcolor nds tor

說明:代理傳值一般在反向傳值中使用。

本貼的例子是:有A和B兩個界面,要實現的效果就是先讓A跳轉到B,然後B中有個顏色的參數,當B跳轉到A時,把這個顏色的參數傳遞給A,在A中利用這個顏色改變自己界面的顏色。

第1步:在發送者(界面B)中,制定協議(在.h頭文件中聲明)

// 協議名一般以本類的類名開頭+Delegate (包含前綴)

@protocol ConfigViewControllerDelegate

// 聲明協議方法,一般以類名開頭(不需要前綴)

- (void)changeBgColor:(UIColor *)color;

第2步:在發送者(界面B)中的.h文件中代理協議。

@interface ConfigViewController : UIViewController

// id即表示誰都可以設置成為我的代理

@property (nonatomic,weak) id delegate;

// ARC使用weak,MRC使用assign

@end

第3步:在發送者(界面B)中的方法中通知代理(最重要的步驟

//這一步一般是在B跳轉到A的方法中實現的,我是在B中創建了一個Button,讓這個通知代理在Button中跳轉方法中實現。

if ([self.delegate respondsToSelector:@selector(changeBgColor:)]) {

// 加入if語句就是先判斷在界面A中是否有changeBgColor這個方法,當有這個方法的時候,才進行代理傳值。

//一般會先實例化出一個color的對象,在進行代理傳值的時候,是帶著這個color一起傳遞過去的。

[self.delegate changeBgColor:color];

//這裏的self是界面B,self.delegate就是界面A了(在第4步和第5步的設置中設置了)

}

第4步:在接收者(界面A)中遵守協議。

@interface ViewController ()

第5步:在接收者(界面A)中設置自己成為代理。

ConfigViewController *testVC = [[ConfigViewController alloc] init];

testVC.delegate = self;

第6步:在接受者(界面A)中實現協議中的方法。

- (void)changeBgColor:(UIColor *)color{

self.view.backgroundColor = color;

}

iOS 代理傳值