注意在界面跳轉(zhuǎn)時(shí):
在presentViewController函數(shù)執(zhí)行的過(guò)程中,會(huì)執(zhí)行目標(biāo)控制器的loadView和viewdidLoad函數(shù)渠鸽。
如果在presentViewController函數(shù)以后傳遞數(shù)據(jù),則需要在viewWillAppear函數(shù)以后取值
正向傳值:
將ViewController傳到下一個(gè)界面:在下一個(gè)界面的.h文件中定義一個(gè)全局變量(數(shù)據(jù)類型和要傳值的類型一致),用來(lái)接收傳遞過(guò)來(lái)的值衙传,在ViewController跳轉(zhuǎn)之前將變量賦值即可
反向傳值:
需要在dismisViewController之前使用協(xié)議方法,在從上一個(gè)界面跳轉(zhuǎn)到當(dāng)前界面時(shí),需要設(shè)置當(dāng)前界面的代理對(duì)象
2.1 使用代理協(xié)議反向傳值:
將界面的值傳遞給上一個(gè)界面時(shí):當(dāng)前界面需要有一個(gè)遵循某個(gè)協(xié)議的代理對(duì)象厕九,通過(guò)代理對(duì)象調(diào)用協(xié)議方法來(lái)傳值給下一個(gè)界面蓖捶,上一個(gè)界面需要遵循某個(gè)協(xié)議,通過(guò)協(xié)議中的某個(gè)方法來(lái)獲取下一個(gè)界面?zhèn)鬟^(guò)來(lái)的值扁远。
反向傳值需要使用代理方法來(lái)給指定控制器傳值
此處的代理協(xié)議充當(dāng)了一個(gè)數(shù)據(jù)傳遞的標(biāo)準(zhǔn)
上一個(gè)控制器 <-- 當(dāng)前控制器
1 定義協(xié)議
2 遵守并實(shí)現(xiàn)協(xié)議 (由前一個(gè)控制器遵守并實(shí)現(xiàn))
3 聲明代理屬性 (在當(dāng)前的控制器)
4 建立代理關(guān)系 (在前一個(gè)控制器中完成)
5 執(zhí)行代理方法 (在當(dāng)前控制器)
2.2 使用block反向傳值:
從當(dāng)前界面?zhèn)髦到o上一個(gè)界面時(shí):需要在當(dāng)前界面的.h文件中聲明一個(gè)全局的block俊鱼,調(diào)用block方法進(jìn)行傳值,然后在從上一個(gè)界面跳轉(zhuǎn)到當(dāng)前界面時(shí)畅买,實(shí)現(xiàn)block方法獲取到當(dāng)前界面的值并闲;
順序:
上個(gè)界面初始化當(dāng)前界面(會(huì)找到當(dāng)前界面的.h文件中聲明的block
方法)->實(shí)現(xiàn)block方法—>present跳轉(zhuǎn)到當(dāng)前界面—>在當(dāng)前
界面中調(diào)用block進(jìn)行傳值—>dismis回上一個(gè)界面
全局傳值:(注意生命周期)
AppDelegate 是整個(gè)程序的一個(gè)單例對(duì)象
可以作為倉(cāng)庫(kù)使用,并且系統(tǒng)提供了方法來(lái)獲取對(duì)象
在AppDelegate的.h文件中聲明全局變量(一個(gè)變量傳遞一個(gè)值谷羞,多個(gè)需要多個(gè)聲明)
哪里需要存入或者取出全局變量焙蚓,則在哪里聲明:
1. 獲取當(dāng)前應(yīng)用程序?qū)ο?br>
UIApplication *app = [UIApplication sharedApplication];
2. 再獲取該對(duì)象的代理
AppDelegate *gelegate = app.delegate;
3.通過(guò)對(duì)象的代理取出或者存入對(duì)應(yīng)的全局變量
僅供木木學(xué)習(xí),以及有需要的伙伴們閱讀~可轉(zhuǎn)載,不可復(fù)制粘貼喲~