通知:
第1步:在發(fā)送者中定義代碼塊屬性:
@property(nonatomic,copy)void(^changeBgColor)(UIColor*color);
第2步:在發(fā)送者中進行代碼塊的調用
if(_changeBgColor) {// 代碼塊屬性不為空_changeBgColor(color);? }
第3步:在接收者中進行代碼塊的具體操作,既賦值操作
// 下列第一句是弱化操作凡简,防止在文件中循環(huán)引用:__weaktypeof(self) weakSelf =self;[testVC setChangeBgColor:^(UIColor*color) {? ? weakSelf.view.backgroundColor = color;}];
關于第1步怎么進行定義逼友,我有這樣三個步驟的模擬;
// 代碼塊屬性3小步 [模仿具體的操作]// 1秤涩、方法實現:把它當做一個方式的格式寫出來- (void)changeBgColor:(UIColor*)color{self.view.backgroundColor = color;? }// 2帜乞、將上面方法轉為函數:轉化成為函數的格式voidchangeBgColor(UIColor*color){self.view.backgroundColor = color;? }// 3、將上面函數轉為代碼塊:加三個符號:^? ()? ;void(^changeBgColor)(UIColor*color){self.view.backgroundColor = color;? };
代碼塊Block傳值:
第1步:在發(fā)送者中定義代碼塊屬性:
@property(nonatomic,copy)void(^changeBgColor)(UIColor*color);
第2步:在發(fā)送者中進行代碼塊的調用
if(_changeBgColor) {// 代碼塊屬性不為空_changeBgColor(color);? }
第3步:在接收者中進行代碼塊的具體操作筐眷,既賦值操作
// 下列第一句是弱化操作黎烈,防止在文件中循環(huán)引用:__weaktypeof(self) weakSelf =self;[testVC setChangeBgColor:^(UIColor*color) {? ? weakSelf.view.backgroundColor = color;}];
關于第1步怎么進行定義,我有這樣三個步驟的模擬匀谣;
// 代碼塊屬性3小步 [模仿具體的操作]// 1照棋、方法實現:把它當做一個方式的格式寫出來- (void)changeBgColor:(UIColor*)color{self.view.backgroundColor = color;? }// 2、將上面方法轉為函數:轉化成為函數的格式voidchangeBgColor(UIColor*color){self.view.backgroundColor = color;? }// 3武翎、將上面函數轉為代碼塊:加三個符號:^? ()? ;void(^changeBgColor)(UIColor*color){self.view.backgroundColor = color;? };
代理:
說明:代理傳值一般在反向傳值中使用烈炭。
本貼的例子是:有A和B兩個界面,要實現的效果就是先讓A跳轉到B宝恶,然后B中有個顏色的參數符隙,當B跳轉到A時,把這個顏色的參數傳遞給A垫毙,在A中利用這個顏色改變自己界面的顏色霹疫。
第1步:在發(fā)送者(界面B)中,制定協議(在.h頭文件中聲明)
// 協議名一般以本類的類名開頭+Delegate (包含前綴)@protocolConfigViewControllerDelegate// 聲明協議方法综芥,一般以類名開頭(不需要前綴)- (void)changeBgColor:(UIColor*)color;
第2步:在發(fā)送者(界面B)中的.h文件中代理協議丽蝎。
@interfaceConfigViewController: UIViewController// id即表示誰都可以設置成為我的代理@property(nonatomic,weak) id delegate;// ARC使用weak,MRC使用assign@end
第3步:在發(fā)送者(界面B)中的方法中通知代理(最重要的步驟)
//這一步一般是在B跳轉到A的方法中實現的膀藐,我是在B中創(chuàng)建了一個Button,讓這個通知代理在Button中跳轉方法中實現屠阻。if([self.delegaterespondsToSelector:@selector(changeBgColor:)]) {// 加入if語句就是先判斷在界面A中是否有changeBgColor這個方法,當有這個方法的時候消请,才進行代理傳值。//一般會先實例化出一個color的對象类腮,在進行代理傳值的時候臊泰,是帶著這個color一起傳遞過去的。[self.delegate changeBgColor:color];//這里的self是界面B蚜枢,self.delegate就是界面A了(在第4步和第5步的設置中設置了)}
第4步:在接收者(界面A)中遵守協議缸逃。
@interfaceViewController ()
第5步:在接收者(界面A)中設置自己成為代理针饥。
ConfigViewController *testVC = [[ConfigViewController alloc] init];testVC.delegate = self;
第6步:在接受者(界面A)中實現協議中的方法。
- (void)changeBgColor:(UIColor *)color{? self.view.backgroundColor=color;? }
單例類傳值:
這個方法進行傳值的好處是在之后的多次使用時需频,可以保證創(chuàng)建出來的對象都是同一個對象丁眼。
第1步:首先創(chuàng)建一個單例類,在里面聲明需要傳遞的屬性昭殉,如下:
@property(nonatomic,copy)NSString*userName;
第2步:
(1)在AppDelegate類中導入Dataclass類
(2)實例化一個對象
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
DataClass*data=[DataClass ?shareData];
returnYES;
}
第3步:在發(fā)送者中苞七,實例化Dataclass創(chuàng)建出來的一個對象,利用對象把對象中的屬性的值存儲進去挪丢。
// 單例類蹂风,只有一個內存空間
DataClass*data=[DataClass ?shareData];
// 存值操作
data.userName=textField.text;
第4步:在接收者中實例化Dataclass創(chuàng)建出來的一個對象,利用對象把對象中的屬性讀取出來乾蓬。
// 取值操作
DataClass*data=[[DataClassalloc]init];
NSString*userName=data.userName;