界面?zhèn)髦祮栴}(正向、反向傳值)

注意在界面跳轉(zhuǎn)時:
在presentViewController函數(shù)執(zhí)行的過程中,會執(zhí)行目標(biāo)控制器的loadView和viewdidLoad函數(shù)。
如果在presentViewController函數(shù)以后傳遞數(shù)據(jù),則需要在viewWillAppear函數(shù)以后取值

正向傳值:

將ViewController傳到下一個界面:在下一個界面的.h文件中定義一個全局變量(數(shù)據(jù)類型和要傳值的類型一致),用來接收傳遞過來的值,在ViewController跳轉(zhuǎn)之前將變量賦值即可

反向傳值:

需要在dismisViewController之前使用協(xié)議方法,在從上一個界面跳轉(zhuǎn)到當(dāng)前界面時,需要設(shè)置當(dāng)前界面的代理對象

2.1 使用代理協(xié)議反向傳值:

將界面的值傳遞給上一個界面時:當(dāng)前界面需要有一個遵循某個協(xié)議的代理對象,通過代理對象調(diào)用協(xié)議方法來傳值給下一個界面,上一個界面需要遵循某個協(xié)議,通過協(xié)議中的某個方法來獲取下一個界面?zhèn)鬟^來的值。

反向傳值需要使用代理方法來給指定控制器傳值
此處的代理協(xié)議充當(dāng)了一個數(shù)據(jù)傳遞的標(biāo)準(zhǔn)
上一個控制器 <-- 當(dāng)前控制器
1 定義協(xié)議
2 遵守并實現(xiàn)協(xié)議  (由前一個控制器遵守并實現(xiàn))
3 聲明代理屬性   (在當(dāng)前的控制器)
4 建立代理關(guān)系    (在前一個控制器中完成)
5 執(zhí)行代理方法   (在當(dāng)前控制器)
2.2 使用block反向傳值:

從當(dāng)前界面?zhèn)髦到o上一個界面時:需要在當(dāng)前界面的.h文件中聲明一個全局的block,調(diào)用block方法進(jìn)行傳值,然后在從上一個界面跳轉(zhuǎn)到當(dāng)前界面時,實現(xiàn)block方法獲取到當(dāng)前界面的值;

順序:
上個界面初始化當(dāng)前界面(會找到當(dāng)前界面的.h文件中聲明的block
方法)->實現(xiàn)block方法—>present跳轉(zhuǎn)到當(dāng)前界面—>在當(dāng)前
界面中調(diào)用block進(jìn)行傳值—>dismis回上一個界面

全局傳值:(注意生命周期)

AppDelegate 是整個程序的一個單例對象
可以作為倉庫使用,并且系統(tǒng)提供了方法來獲取對象

在AppDelegate的.h文件中聲明全局變量(一個變量傳遞一個值,多個需要多個聲明)
哪里需要存入或者取出全局變量,則在哪里聲明:
1. 獲取當(dāng)前應(yīng)用程序?qū)ο?br> UIApplication *app = [UIApplication sharedApplication];
2. 再獲取該對象的代理
AppDelegate *gelegate = app.delegate;
3.通過對象的代理取出或者存入對應(yīng)的全局變量

僅供木木學(xué)習(xí),以及有需要的伙伴們閱讀~可轉(zhuǎn)載,不可復(fù)制粘貼喲~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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