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

目錄:字體

1、正向傳值spa

2、反向傳值代理

3、代理模式ip

回到頂部內存

正向傳值:就是把第一個界面的值傳給第二個界面顯示,其簡單實現方法it

1 首先在第一個界面中要有一個textField輸入框,一個按鈕button,第二個界面至少有一個要顯示該值的標籤lable,並附帶一個back按鈕。io

2 在第一個界面.m文件中拉一個button按鈕的方法,這個方法實現了接收textField文本框的值,並賦值給第二個界面的一個公開屬性,假設是message(之因此要一個公開屬性,由於語法規定不能直接訪問第二個界面裏面的控件),而後跳轉到第二個界面。循環

3 在第二個界面中的lable控件經過訪問message屬性獲取值。該賦值寫在一個叫viewDidLoad 方法中,這是由於這個方法在進入第二個界面時會自動執行。記住:這個方法在view建立的時候只執行一次。語法

- (IBAction)sendMassage:(UIButton *)sender {
    //建立第二個VC
    MXsceondViewController* sceondViewController = [[MXsceondViewController alloc]initWithNibName:@"MXsceondViewController" bundle:nil];
    //設置翻動到第二個VC特效
    sceondViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    //傳text的值到第二個VC中的公開屬性message 規定不能直接訪問第二個VC中的label
    sceondViewController.message = self.sendField2.text;
    //跳轉到建立好的VC界面
    [self presentViewController:sceondViewController animated:YES completion:nil];
    
}
引用

回到頂部

反向傳值:就是點擊第一個界面的一個button按鈕,跳轉到第二個界面,而後把第二個界面的值傳回第一個界面並顯示,其簡單實現方法

1 首先在第一個界面中有一個button按鈕,有一個接收值的label標籤,第二個界面有一個textField文本框,一個button按鈕。

2 在第一個界面.m文件中拉一個button按鈕的方法,這個方法實現了把本身self賦值給第二個界面建立的公開屬性(這個屬性其實就是第一個界面的一個引用),爲何要這麼作呢,是爲了在第二個界面中能訪問第一個界面的屬性或方法,固然包括修改其lable控件內容。而後就跳轉到第二個界面中

3 在第二個界面的.m文件中拉一個button按鈕的方法,該方法實現了把textField文本框的值傳給第一個界面的lable標籤, 並返回第一個界面。

4 而在第一個界面中這麼接收這個值寫在哪裏好呢,系統提供了一個viewWillAppear方法,把賦值語句寫在這裏邊就行了,這個方法的意思只要顯示界面就會調用這個方法,和viewDidLoad的不一樣之處就在這一點。

- (IBAction)didGetUserMessage:(UIButton *)sender {
    self.firstViewCtroller.userInputMessage = self.textField.text;
    //執行完這句話會調用dealloc,釋放掉MXSecondViewController
    [self dismissViewControllerAnimated:YES completion:nil];
}

反向引用注意事項

1 第二個界面中指向第一個界面的屬性應該是weak,以防止內存的循環引用

2 比較適合簡單的傳值,若是兩個VC的關係很是緊密時使用

回到頂部

代理(委託)模式:在反向傳值中咱們知道第二個界面(委託方)能夠返回值給第一個界面,那麼若是有不少這樣像第一個界面同樣須要從委託方獲得本身須要的值,咱們知道在委託方咱們有一個屬性能夠接收一個固定界面的屬性,那麼若是有多個呢,咱們不能寫多個這樣的屬性吧,這樣顯然不合適,這裏咱們就須要用到協議這樣一個方法來解決這樣的問題,具體作法以下

1 有四個界面,第一個界面有兩個button指向第二和第三界面,而第二和第三界面中都有一個button和一個lable,這個button點擊以後跳轉到第四個界面,第四個界面有一個textField文本框和一個button,點擊第四個界面的button以後把textField的值傳回第二或第三界面顯示在lable中(這個是根據經過誰來到第四個界面的)

2 在第四個界面(委託方)定義一個協議並寫一個方法,這個方法就是傳值的,還有一個協議屬性,用來接收不一樣的界面引用。

3 在第二第三界面中要遵照這個協議並實現方法,這個方法就是接收值的,這兩個界面的button方法以及接收值和反向傳值是同樣的。

做業:星座運程App,反向傳值,必須使用委託,第一個界面有一個按鈕,有一個label顯示當前星座今年的運程,按鈕按下後進入另外一個選擇星座的界面。

做業:第一個界面有一個按鈕(建立文本),一個lable,第二個界面有x:【座標】,y:【座標】,width【寬度】height【高度】肯定按鈕,text【文本內容】點擊肯定按鈕後界面回到第一界面顯示,根據數據決定大笑寬高,讓用戶選擇lable字體顏色,顏色是個按鈕

相關文章
相關標籤/搜索