国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

03-UIKit、VC之間正向反向傳值、代理

2019-11-14 20:44:14
字體:
供稿:網(wǎng)友

目錄:

一、正向傳值

二、反向傳值

三、代理模式

回到頂部

正向傳值:就是把第一個(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è)按鈕


上一篇:Xcode-添加文檔注釋插件

下一篇:01-UIKit

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通道| 越西县| 南召县| 腾冲县| 中超| 民勤县| 阿拉尔市| 鄂温| 五家渠市| 宜兰市| 滨海县| 班玛县| 静乐县| 乐安县| 紫金县| 绥中县| 兴隆县| 泽州县| 乐清市| 汉寿县| 株洲市| 江门市| 云安县| 凭祥市| 海阳市| 寿阳县| 宣汉县| 庐江县| 宁陕县| 博爱县| 淮南市| 手机| 葫芦岛市| 安陆市| 西华县| 长武县| 岗巴县| 黄龙县| 康定县| 开封县| 曲周县|