說明:代理傳值一般在反向傳值中使用呕缭。
本貼的例子是:有A和B兩個界面饱亿,要實現(xiàn)的效果就是先讓A跳轉到B,然后B中有個顏色的參數(shù)给郊,當B跳轉到A時牡肉,把這個顏色的參數(shù)傳遞給A,在A中利用這個顏色改變自己界面的顏色淆九。
第1步:在發(fā)送者(界面B)中统锤,制定協(xié)議(在.h頭文件中聲明)
// 協(xié)議名一般以本類的類名開頭+Delegate (包含前綴)
@protocol ConfigViewControllerDelegate <NSObject>
// 聲明協(xié)議方法,一般以類名開頭(不需要前綴)
- (void)changeBgColor:(UIColor *)color;
第2步:在發(fā)送者(界面B)中的.h文件中代理協(xié)議炭庙。
@interface ConfigViewController : UIViewController
// id即表示誰都可以設置成為我的代理
@property (nonatomic,weak) id<ConfigViewControllerDelegate> delegate;
// ARC使用weak饲窿,MRC使用assign
@end
第3步:在發(fā)送者(界面B)中的方法中通知代理(最重要的步驟)
//這一步一般是在B跳轉到A的方法中實現(xiàn)的,我是在B中創(chuàng)建了一個Button,讓這個通知代理在Button中跳轉方法中實現(xiàn)焕蹄。
if ([self.delegate respondsToSelector:@selector(changeBgColor:)]) {
// 加入if語句就是先判斷在界面A中是否有changeBgColor這個方法逾雄,當有這個方法的時候,才進行代理傳值腻脏。
//一般會先實例化出一個color的對象鸦泳,在進行代理傳值的時候,是帶著這個color一起傳遞過去的迹卢。
[self.delegate changeBgColor:color];
//這里的self是界面B辽故,self.delegate就是界面A了(在第4步和第5步的設置中設置了)
}
第4步:在接收者(界面A)中遵守協(xié)議。
@interface ViewController () <ConfigViewControllerDelegate>
第5步:在接收者(界面A)中設置自己成為代理腐碱。
ConfigViewController *testVC = [[ConfigViewController alloc] init];
testVC.delegate = self;
第6步:在接受者(界面A)中實現(xiàn)協(xié)議中的方法誊垢。
- (void)changeBgColor:(UIColor *)color{
self.view.backgroundColor = color;
}
附:常用傳值方法:
block傳值
代理傳值
正向傳值
通知中心傳值
單例類傳值
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者