代理傳值

1.在發(fā)送者(界面B)中,制定協(xié)議(在.h頭文件中聲明)

// 協(xié)議名一般以本類的類名開頭+Delegate (包含前綴)
 @protocol ConfigViewControllerDelegate <NSObject>
// 聲明協(xié)議方法,一般以類名開頭(不需要前綴)
- (void)changeBgColor:(UIColor *)color;
@end

2.在發(fā)送者(界面B)中的.h文件中代理協(xié)議
@property (nonatomic,weak) id<ConfigViewControllerDelegate> delegate;
3.在發(fā)送者(界面B)中的方法中通知代理(最重要的步驟)

//這一步一般是在B跳轉(zhuǎn)到A的方法中實現(xiàn)的,我是在B中創(chuàng)建了一個Button,讓這個通知代理在Button中跳轉(zhuǎn)方法中實現(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;
  }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容