目錄:
正向傳值:就是把第一個(gè)界面的值傳給第二個(gè)界面顯示,其簡單實(shí)現(xiàn)方法
1 首先在第一個(gè)界面中要有一個(gè)textField輸入框,一個(gè)按鈕button,第二個(gè)界面至少有一個(gè)要顯示該值的標(biāo)簽lable,并附帶一個(gè)back按鈕。
2 在第一個(gè)界面.m文件中拉一個(gè)button按鈕的方法,這個(gè)方法實(shí)現(xiàn)了接收textField文本框的值,并賦值給第二個(gè)界面的一個(gè)公開屬性,假設(shè)是message(之所以要一個(gè)公開屬性,因?yàn)檎Z法規(guī)定不能直接訪問第二個(gè)界面里面的控件),然后跳轉(zhuǎn)到第二個(gè)界面。
3 在第二個(gè)界面中的lable控件通過訪問message屬性獲取值。該賦值寫在一個(gè)叫viewDidLoad 方法中,這是因?yàn)檫@個(gè)方法在進(jìn)入第二個(gè)界面時(shí)會(huì)自動(dòng)執(zhí)行。記住:這個(gè)方法在view創(chuàng)建的時(shí)候只執(zhí)行一次。
- (IBAction)sendMassage:(UIButton *)sender {
//創(chuàng)建第二個(gè)VC
MXsceondViewController* sceondViewController = [[MXsceondViewController alloc]initWithNibName:@"MXsceondViewController" bundle:nil];
//設(shè)置翻動(dòng)到第二個(gè)VC特效
sceondViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
//傳text的值到第二個(gè)VC中的公開屬性message 規(guī)定不能直接訪問第二個(gè)VC中的label
sceondViewController.message = self.sendField2.text;
//跳轉(zhuǎn)到創(chuàng)建好的VC界面
[self PResentViewController:sceondViewController animated:YES completion:nil];
}
反向傳值:就是點(diǎn)擊第一個(gè)界面的一個(gè)button按鈕,跳轉(zhuǎn)到第二個(gè)界面,然后把第二個(gè)界面的值傳回第一個(gè)界面并顯示,其簡單實(shí)現(xiàn)方法
1 首先在第一個(gè)界面中有一個(gè)button按鈕,有一個(gè)接收值的label標(biāo)簽,第二個(gè)界面有一個(gè)textField文本框,一個(gè)button按鈕。
2 在第一個(gè)界面.m文件中拉一個(gè)button按鈕的方法,這個(gè)方法實(shí)現(xiàn)了把自己self賦值給第二個(gè)界面創(chuàng)建的公開屬性(這個(gè)屬性其實(shí)就是第一個(gè)界面的一個(gè)引用),為什么要這么做呢,是為了在第二個(gè)界面中能訪問第一個(gè)界面的屬性或方法,當(dāng)然包括修改其lable控件內(nèi)容。然后就跳轉(zhuǎn)到第二個(gè)界面中
3 在第二個(gè)界面的.m文件中拉一個(gè)button按鈕的方法,該方法實(shí)現(xiàn)了把textField文本框的值傳給第一個(gè)界面的lable標(biāo)簽, 并返回第一個(gè)界面。
4 而在第一個(gè)界面中這么接收這個(gè)值寫在哪里好呢,系統(tǒng)提供了一個(gè)viewWillAppear方法,把賦值語句寫在這里邊就好了,這個(gè)方法的意思只要顯示界面就會(huì)調(diào)用這個(gè)方法,和viewDidLoad的不同之處就在這一點(diǎn)。
- (IBAction)didGetUserMessage:(UIButton *)sender {
self.firstViewCtroller.userInputMessage = self.textField.text;
//執(zhí)行完這句話會(huì)調(diào)用dealloc,釋放掉MXSecondViewController
[self dismissViewControllerAnimated:YES completion:nil];
}
反向引用注意事項(xiàng)
1 第二個(gè)界面中指向第一個(gè)界面的屬性應(yīng)該是weak,以防止內(nèi)存的循環(huán)引用
2 比較適合簡單的傳值,如果兩個(gè)VC的關(guān)系非常緊密時(shí)使用
代理(委托)模式:在反向傳值中我們知道第二個(gè)界面(委托方)可以返回值給第一個(gè)界面,那么如果有很多這樣像第一個(gè)界面一樣需要從委托方得到自己需要的值,我們知道在委托方我們有一個(gè)屬性可以接收一個(gè)固定界面的屬性,那么如果有多個(gè)呢,我們不能寫多個(gè)這樣的屬性吧,這樣顯然不合適,這里我們就需要用到協(xié)議這樣一個(gè)方法來解決這樣的問題,具體做法如下
1 有四個(gè)界面,第一個(gè)界面有兩個(gè)button指向第二和第三界面,而第二和第三界面中都有一個(gè)button和一個(gè)lable,這個(gè)button點(diǎn)擊之后跳轉(zhuǎn)到第四個(gè)界面,第四個(gè)界面有一個(gè)textField文本框和一個(gè)button,點(diǎn)擊第四個(gè)界面的button之后把textField的值傳回第二或第三界面顯示在lable中(這個(gè)是根據(jù)通過誰來到第四個(gè)界面的)
2 在第四個(gè)界面(委托方)定義一個(gè)協(xié)議并寫一個(gè)方法,這個(gè)方法就是傳值的,還有一個(gè)協(xié)議屬性,用來接收不同的界面引用。
3 在第二第三界面中要遵守這個(gè)協(xié)議并實(shí)現(xiàn)方法,這個(gè)方法就是接收值的,這兩個(gè)界面的button方法以及接收值和反向傳值是一樣的。
作業(yè):星座運(yùn)程App,反向傳值,必須使用委托,第一個(gè)界面有一個(gè)按鈕,有一個(gè)label顯示當(dāng)前星座今年的運(yùn)程,按鈕按下后進(jìn)入另一個(gè)選擇星座的界面。
作業(yè):第一個(gè)界面有一個(gè)按鈕(創(chuàng)建文本),一個(gè)lable,第二個(gè)界面有x:【坐標(biāo)】,y:【坐標(biāo)】,width【寬度】height【高度】確定按鈕,text【文本內(nèi)容】點(diǎn)擊確定按鈕后界面回到第一界面顯示,根據(jù)數(shù)據(jù)決定大笑寬高,讓用戶選擇lable字體顏色,顏色是個(gè)按鈕
新聞熱點(diǎn)
疑難解答
圖片精選