ios - 利用block實現雙向傳值

  • 實現的功能: 在TwoViewcontroller中點擊按鈕調用Viewcontroller的對象方法,將要設置的顏色傳遞給上一個控制器Viewcontroller,并給Viewcontroller中的greenView賦值,實現顏色的改變
  • 通過在Viewcontroller的對象方法中調用block并將要傳遞給TwoVIewcontroller的數據寫入block參數中,實現了block回調,由于block實現是在Twoviewcontroller中實現的,則block跳回TwoVIewcontroller中執(zhí)行,將傳進來的參數(顏色)賦值給TwoViewcontroller中的blueView.
  • 設置回調的block有返回值,在TwoViewcontroller中定義block的時候返回一個NSString類型的字符串給調用block的ViewController實現數據的第二次回調.回調給VIewcontroller,并設置給VIewcontroller中的label
  • 圖片效果如下
01.gif
  • 由于是在TwoVIewController中調用的ViewController中的對象方法所以在ViewController中定義對象方法.

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

/** 
 1.傳遞進來的參數color賦值給greenView
 2.設置回調block類型為有返回值(NSString類型),有參數(UIColor類型)的block
 */
-(void)setGreenViewColorWithColor:(UIColor *)color andCallBackBlock:(NSString *(^)(UIColor * color))callBackBlock;

@end

  • 在ViewController.m實現此方法

-(void)setGreenViewColorWithColor:(UIColor *)color andCallBackBlock:(NSString * (^)(UIColor *))callBackBlock{

    self.greenView.backgroundColor = color;
    
    /** 
     1.將要傳遞回給TwoViewcontroller的顏色通過調用代碼塊block傳遞回去
     2.block在哪里實現就是在哪里調用.
     3.將block返回的字符串接受并設置給lblReceive
     */
     self.lblReceive.text = callBackBlock(color);
}

  • 在TwoViewController中調用上述實現的方法

#import "TwoViewController.h"
#import "ViewController.h"
@interface TwoViewController ()

@property (weak, nonatomic) IBOutlet UIView *blueView;

@end

@implementation TwoViewController

/** 點擊按鈕 */
- (IBAction)clickMe:(id)sender {
    
    /** 
     1.通過self.navigationController.viewControllers[0]方式獲得跟控制器ViewController 
     2.注意: 這里有個 "坑" 就是如何獲取上一個控制器對象,只能通過self.navigationController.viewControllers[0] 此方法來獲取
     */
    ViewController * vc = self.navigationController.viewControllers[0];
    
    /** 
     1.調用VIewcontroller對象方法將要設置顏色信息傳遞給ViewsController中的greenView,并設置顏色
     */
    [vc setGreenViewColorWithColor:[UIColor redColor] andCallBackBlock:^(UIColor *color) {
        
      /** 將block傳遞回來的color賦值給blueView,實現數據回調 */
        self.blueView.backgroundColor = color;
        
        /** 返回一個字符串 */
        return @"紅色";
    }];
}

  • 注意點: 調動ViewController的對象方法,不能用ViewController new 一個對象,然后用new出來的對象調用ViewController中的對象方法是不會給上一個控制器的greenView賦上值的,因為new出來的是一個新的對象跟上一個控制器不是同一個對象.所以在此只能用self.navigationController.viewControllers[0]來實現獲取上一個控制器

整體思路:

  1. 在TwoViewController中調用ViewController的對象方法,把要設置顏色傳遞過去,實現Viewcontroller中的greenView的顏色改變.
  2. 通過在ViewController對象方法中調用block,并將要傳遞的參數寫入block的參數中,傳遞給TwoVIewcontroller,然后實現TwoViewcontroller中的blueView的顏色改變
  3. 通過block的返回值(NSString類型),又將TwoViewcontroller中要傳遞給ViewController的數據傳遞給了ViewController.實現了ViewController中的label的賦值.
  4. 注意點: 獲取上一個控制器,只能通過self.navigationController.viewControllers[0]來實現
  • 分析圖
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末腮鞍,一起剝皮案震驚了整個濱河市值骇,隨后出現的幾起案子移国,更是在濱河造成了極大的恐慌,老刑警劉巖迹缀,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件使碾,死亡現場離奇詭異蜜徽,居然都是意外死亡票摇,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門矢门,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盆色,“玉大人,你說我怎么就攤上這事隔躲。” “怎么了物延?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叛薯。 經常有香客問我浑吟,道長,這世上最難降的妖魔是什么案训? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮强霎,結果婚禮上忿项,老公的妹妹穿的比我還像新娘城舞。我一直安慰自己轩触,他們只是感情好家夺,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拉馋,像睡著了一般榨为。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上随闺,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音蔓腐,去河邊找鬼矩乐。 笑死,一個胖子當著我的面吹牛散罕,可吹牛的內容都是我干的。 我是一名探鬼主播欧漱,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼职抡,長吁一口氣:“原來是場噩夢啊……” “哼硫椰!你這毒婦竟也來了繁调?” 一聲冷哼從身側響起靶草,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奕翔,沒想到半個月后裕寨,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡宾袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了驾窟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庆猫。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡绅络,死狀恐怖,靈堂內的尸體忽然破棺而出恩急,到底是詐尸還是另有隱情杉畜,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布衷恭,位于F島的核電站,受9級特大地震影響随珠,放射性物質發(fā)生泄漏灭袁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一简卧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烤芦,春花似錦、人聲如沸构罗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遂唧。三九已至,卻和暖如春盖彭,著一層夾襖步出監(jiān)牢的瞬間纹烹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工铺呵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人隧熙。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓片挂,卻偏偏與公主長得像贞盯,于是被迫代替她去往敵國和親音念。 傳聞我的和親對象是個殘疾皇子躏敢,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,146評論 30 470
  • iOS網絡架構討論梳理整理中。件余。讥脐。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,193評論 1 23
  • 把網上的一些結合自己面試時遇到的面試題總結了一下攘烛,以后有新的還會再加進來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,567評論 0 20
  • 禪與 Objective-C 編程藝術 (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,628評論 1 10
  • 1. Java基礎部分 基礎部分的順序:基本語法镀首,類相關的語法,內部類的語法更哄,繼承相關的語法芋齿,異常的語法,線程的語...
    子非魚_t_閱讀 31,639評論 18 399