UI傳值

1.正向傳值:
概念:RootViewController(RVC) (傳向)—> SubViewController(SVC)
方法:正向傳值又稱屬性傳值仪媒,在SVC中定義專門用來傳值的屬性(如傳字符串屬性的值氢架,則定義NSString類型屬性)
RVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    KGSubViewController * svc = [[KGSubViewController alloc]init];
    svc.string = tf.text;
    [self presentViewController:svc animated:YES completion:nil];
}

SVC.h文件:

@property(nonatomic,retain) NSString * string;//定義一個屬性,用來接收數(shù)據(jù)

SVC.m文件:

label.text = self.string;//在這里,將傳進(jìn)來的數(shù)據(jù),賦給label

2.反向傳值:
(1)使用對象傳值:
概念:在SVC.h文件中定義RVC類型的對象作為屬性,以方便調(diào)用/以賦值
RVC.h文件:

-(void)backValue:(NSString *)string color:(UIColor *)color;//聲明一個方法用來進(jìn)行傳值

RVC.m文件:

-(void)backValue:(NSString *)string color:(UIColor *)color//定義返回參數(shù)的函數(shù)
{
    label.text = string;//將參數(shù)的值賦給label
    label.textColor = color; //將顏色賦給賦給lable的字體顏色
}
    
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    KGSubViewController * svc = [[KGSubViewController alloc]init];
    svc.rvc = self;//讓B持有A
    [self presentViewController:svc animated:YES completion:nil];
}

SVC.h文件:

@property(nonatomic,retain) KGRootViewController * rvc;//創(chuàng)建一個Root對象

SVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.rvc backValue:tf.text color:[UIColor redColor]];//在銷毀之前,做一些回傳數(shù)據(jù)的事
    [self dismissViewControllerAnimated:YES completion:nil];
}

(2)使用target/selector傳值:
概念:在SVC.h文件中聲明target/selector屬性,以傳遞變量和方法托享,避免對象傳值中信息完全暴露的危險
RVC.m文件:

-(void)backValue:(NSString *)string
{
    label.text = string;//回傳數(shù)據(jù)方法
}
    
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    KGSubViewController * svc = [[KGSubViewController alloc]init];
    svc.target = self;//將回傳對象進(jìn)行指定
    svc.selector = @selector(backValue:);//將回傳方法,進(jìn)行指定
    [self presentViewController:svc animated:YES completion:nil];
}

SVC.h文件:

//在這里定義兩個屬性,用來接收目標(biāo)和方法,用來進(jìn)行反向傳值
@property(nonatomic,retain) id target; //接收要回傳的對象
@property(nonatomic,assign) SEL selector;//接收回傳數(shù)據(jù)的方法

SVC.m 文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //在銷毀之前,將數(shù)據(jù)回傳回去
    //利用保存的target 和 action 來進(jìn)行回傳
    if ([self.target respondsToSelector:self.selector]) {
        [self.target performSelector:self.selector withObject:tf.text];
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}

(3)使用協(xié)議代理傳值:
概念:要SVC—>RVC,則需要RVC遵守SVC的協(xié)議俊卤,實現(xiàn)協(xié)議中的方法,才能將值反向傳遞
RVC.m文件:

#import "KGSubViewController.h"http://因為協(xié)議制定在B的.h文件里,所以在導(dǎo)入.h文件時,協(xié)議也一起導(dǎo)入

//實現(xiàn)協(xié)議 方法
-(void)backValue:(NSString *)string
{
    label.text = string;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    KGSubViewController * svc = [[KGSubViewController alloc]init];
    svc.delegate = self;//讓A同意B所提出的協(xié)議條件
    [self presentViewController:svc animated:YES completion:nil];
}

SVC.h文件:

@protocol BackValue <NSObject>//在B頁面里,制定一個協(xié)議
-(void)backValue:(NSString *)string;//回傳數(shù)據(jù)的協(xié)議方法
@end
            
@property(nonatomic,weak) id < BackValue > delegate;

SVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.delegate backValue:tf.text];
    [self dismissViewControllerAnimated:YES completion:nil];
}

(4)使用系統(tǒng)自帶的completion block傳值:
概念:利用系統(tǒng)自帶的completion block函數(shù)進(jìn)行傳值
RVC.h文件:

@property(nonatomic,retain) UILabel * label;//用來反向接收數(shù)據(jù)

RVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    KGSubViewController * svc = [[KGSubViewController alloc]init];
    svc.rvc = self;
    //OC中,block用來去指向一個匿名的語句塊,從而可以當(dāng)成函數(shù)還調(diào)用該語句塊
    //這個方法的第三個參數(shù)是一個block,意思說,當(dāng)彈出來的svc顯示完成后,執(zhí)行block里的內(nèi)容
    [self presentViewController:svc animated:YES completion:^{
        svc.textField.text = self.label.text;//正向傳值
    }];
}

SVC.h文件:

@property(nonatomic,retain) UITextField * textField;//用來正向接收數(shù)據(jù)
@property(nonatomic,retain) KGRootViewController * rvc;//一個反向數(shù)據(jù)

SVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self dismissViewControllerAnimated:YES completion:^{
    self.rvc.label.text = self.textField.text;}];
}

(5)使用自定義的block傳值:
概念:因為block相當(dāng)于匿名函數(shù)指針血筑,是一段方法的代碼塊绘沉,所以只要有這個指針就可以調(diào)用該方法,而這個方法具體要實現(xiàn)什么功能可以視情況而定豺总,相實現(xiàn)什么方法就定義什么方法
RVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    KGSubViewController * svc = [[KGSubViewController alloc]init];
    svc.block = ^(NSString * string){//給block賦值,做用是讓svc知道block指向的代碼塊的功能
        label.text = string;};
    [self presentViewController:svc animated:YES completion:nil];
}

SVC.h文件:

@property(nonatomic,copy)void (^block)(NSString *);//定義一個block的屬性

SVC.m文件:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if(self.block){
        self.block(tf.text);//執(zhí)行block
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末车伞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子喻喳,更是在濱河造成了極大的恐慌另玖,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谦去,居然都是意外死亡慷丽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門鳄哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來要糊,“玉大人,你說我怎么就攤上這事妆丘〕恚” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵飘痛,是天一觀的道長珊膜。 經(jīng)常有香客問我,道長宣脉,這世上最難降的妖魔是什么车柠? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮塑猖,結(jié)果婚禮上竹祷,老公的妹妹穿的比我還像新娘。我一直安慰自己羊苟,他們只是感情好塑陵,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜡励,像睡著了一般令花。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凉倚,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天兼都,我揣著相機(jī)與錄音,去河邊找鬼稽寒。 笑死扮碧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杏糙。 我是一名探鬼主播慎王,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宏侍!你這毒婦竟也來了赖淤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谅河,失蹤者是張志新(化名)和其女友劉穎咱旱,沒想到半個月后嗜愈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莽龟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锨天。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毯盈。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖病袄,靈堂內(nèi)的尸體忽然破棺而出搂赋,到底是詐尸還是另有隱情,我是刑警寧澤益缠,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布脑奠,位于F島的核電站,受9級特大地震影響幅慌,放射性物質(zhì)發(fā)生泄漏宋欺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一胰伍、第九天 我趴在偏房一處隱蔽的房頂上張望齿诞。 院中可真熱鬧,春花似錦骂租、人聲如沸祷杈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽但汞。三九已至,卻和暖如春互站,著一層夾襖步出監(jiān)牢的瞬間私蕾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工云茸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留是目,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓标捺,卻偏偏與公主長得像懊纳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亡容,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 這兩個方法都可以傳值 Button自己的跳轉(zhuǎn)方法 又叫模態(tài)(突然間跳到另一個界面用這個方法) 第一頁條第二頁用[s...
    簡單erwtger閱讀 153評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理闺兢,服務(wù)發(fā)現(xiàn)茂缚,斷路器戏罢,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 禪與 Objective-C 編程藝術(shù) (Zen and the Art of the Objective-C C...
    GrayLand閱讀 1,607評論 1 10
  • 1.正向傳值 屬性傳值在B類中定義屬性用于接收A類傳來的數(shù)據(jù) 2.反向傳值(回調(diào)) 1)利用對象反向傳值 將A類對...
    ScaryMonsterLyn閱讀 1,321評論 0 0
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,915評論 6 13