iOS 傳值的幾種方法(通知、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;? };

代碼塊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;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末惠啄,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子任内,更是在濱河造成了極大的恐慌撵渡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件死嗦,死亡現場離奇詭異趋距,居然都是意外死亡,警方通過查閱死者的電腦和手機越走,發(fā)現死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門棚品,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人廊敌,你說我怎么就攤上這事铜跑。” “怎么了骡澈?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵锅纺,是天一觀的道長。 經常有香客問我肋殴,道長囤锉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任护锤,我火速辦了婚禮官地,結果婚禮上,老公的妹妹穿的比我還像新娘烙懦。我一直安慰自己驱入,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亏较,像睡著了一般莺褒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雪情,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天遵岩,我揣著相機與錄音,去河邊找鬼巡通。 笑死尘执,一個胖子當著我的面吹牛,可吹牛的內容都是我干的扁达。 我是一名探鬼主播正卧,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跪解!你這毒婦竟也來了炉旷?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叉讥,失蹤者是張志新(化名)和其女友劉穎窘行,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體图仓,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡罐盔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了救崔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惶看。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖六孵,靈堂內的尸體忽然破棺而出纬黎,到底是詐尸還是另有隱情,我是刑警寧澤劫窒,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布本今,位于F島的核電站甜滨,受9級特大地震影響荐健,放射性物質發(fā)生泄漏。R本人自食惡果不足惜荠瘪,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一孕索、第九天 我趴在偏房一處隱蔽的房頂上張望逛艰。 院中可真熱鬧,春花似錦搞旭、人聲如沸散怖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杭抠。三九已至,卻和暖如春恳啥,著一層夾襖步出監(jiān)牢的瞬間偏灿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工钝的, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翁垂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓硝桩,卻偏偏與公主長得像沿猜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碗脊,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容