【GeekBand】Week4. 基于segue的ViewController之間的數(shù)據(jù)傳遞

前言:

當(dāng)我們需要多個View Controller來完成多個界面時饼齿,經(jīng)常會需要互相傳遞數(shù)據(jù)屡萤,這時我們就會用到segue。當(dāng)然delegate也可以勝任這個任務(wù)贫堰,但是相比delegate穆壕,segue的使用就簡單很多了。


第四周一個簡單的小作業(yè):

制作四步注冊界面:

  1. 用戶名/密碼
  2. email / 全名
  • 界面上要提示用戶名
  • 可返回上一步其屏,應(yīng)能顯示之前填寫的資料
  • 如果返回過上一步喇勋,再進(jìn)來,之前填寫過的資料要有
  1. 確認(rèn)填寫的信息是否正確偎行,
  • 顯示所有填寫過的信息川背,密碼用 * 代替
  • 可返回上一步,應(yīng)能顯示之前填寫的資料
  1. 創(chuàng)建成功提示
  • 要提到用戶名
  • 放一個注冊下一個用戶蛤袒,要能直接跳到第1步
  • 如果想加一個主動結(jié)束應(yīng)用的按鈕熄云,可調(diào)用 exit(0);

我們就以第1、2步為例來說明ViewController之間利用segue進(jìn)行數(shù)據(jù)傳遞的使用方法妙真。

兩個ViewController

兩個ViewController分別為FirstViewController和SecondViewController(以下簡稱First缴允、Second)

一、UIStoryboardSegue的定義


@interface UIStoryboardSegue : NSObject

- (id)initWithIdentifier:(NSString *)identifier 
                  source:(UIViewController *)source 
             destination:(UIViewController *)destination; 

@property (nonatomic, readonly) NSString *identifier;
@property (nonatomic, readonly) id sourceViewController;
@property (nonatomic, readonly) id destinationViewController;

@end
  • identifier

用來找到segue的標(biāo)識

  • source & destination

為了區(qū)分視圖的跳轉(zhuǎn)珍德,可以用上一個练般、下一個來表示,也可以用源視圖锈候、目標(biāo)視圖來表示薄料。 即:sourceViewController 和destinationViewController。 目標(biāo)視圖控制器是指:即將顯示(加載)的視圖晴及, 而源視圖控制器是指:即將被取代的視圖控制器都办。

二、點(diǎn)擊First的下一步虑稼,將First中的用戶名傳給Second


  1. 先在storyboard中將“下一步”與Second連接起來琳钉,并將這一步的segue的identifier屬性設(shè)成to2。
  2. 這里我們需要用到- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender這個方法蛛倦,使用segue參數(shù)的destinationViewController屬性就可以找到下一個ViewController了歌懒。
  3. 僅僅找到是不夠的,我們還需要為下一個ViewController賦值溯壶,使用[viewController setValue: forKey: ]來存儲數(shù)據(jù)及皂。

First類中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController* destinationController = [segue destinationViewController];
    if ([segue.identifier isEqualToString:@"to2"]) {
        [destinationController setValue:self.nameField.text forKey:@"name"];
    }
}

Second類.h中:

@interface SecondViewController : UIViewController
@property (strong, nonatomic) NSString* name;
@end

這樣我們就可以在Second中直接使用name屬性來訪問數(shù)據(jù)了甫男。

三、點(diǎn)擊Second上一步验烧,將Second數(shù)據(jù)傳給First


為了實(shí)現(xiàn)這個要求

如果返回過上一步板驳,再進(jìn)來,之前填寫過的資料要有

我們就需要將這些信息傳給First碍拆,以便在First下一步的時候可以重新將這些數(shù)據(jù)傳進(jìn)來若治。
這里不能再用一個segue再指回去,這樣會使得界面每次都重新加載會出現(xiàn)各種問題感混,所以我們利用Second的exit返回上一步端幼,使用unwind segue。同樣弧满,這里我們先把unwind segue的identifier屬性設(shè)成from2To1婆跑。

First類.h中:

@interface ViewController : UIViewController
@property (strong, nonatomic) NSString* fullname;
@property (strong, nonatomic) NSString* email;
@end

First類.m中:

- (IBAction)unwindToFirst:(UIStoryboardSegue *)unwindSegue towardsViewController:(UIViewController *)subsequentVC {
//    if ([unwindSegue.identifier isEqualToString:@"from2To1"]) {
//        NSLog(@"fullname: %@", _fullname);
//    }
}

Second類中和之前一樣的傳值方式:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"from2To1"]) {
        UIViewController* destinationController = [segue destinationViewController];
        [destinationController setValue:self.fullnameField.text forKey:@"fullname"];
        [destinationController setValue:self.emailField.text forKey:@"email"];
    }
}

四、其他

  • prepareForSegue: sender:的觸發(fā)條件:
    當(dāng)前的視圖控制器即將被另一個視圖控制器所替代時庭呜,segue將處于激活狀態(tài)滑进,從而調(diào)用prepareForSegue:sender: 方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疟赊,一起剝皮案震驚了整個濱河市郊供,隨后出現(xiàn)的幾起案子峡碉,更是在濱河造成了極大的恐慌近哟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲫寄,死亡現(xiàn)場離奇詭異吉执,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)地来,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門戳玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人未斑,你說我怎么就攤上這事咕宿。” “怎么了蜡秽?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵府阀,是天一觀的道長。 經(jīng)常有香客問我芽突,道長试浙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任寞蚌,我火速辦了婚禮田巴,結(jié)果婚禮上钠糊,老公的妹妹穿的比我還像新娘。我一直安慰自己壹哺,他們只是感情好抄伍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著管宵,像睡著了一般逝慧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啄糙,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天笛臣,我揣著相機(jī)與錄音,去河邊找鬼隧饼。 笑死沈堡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燕雁。 我是一名探鬼主播诞丽,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拐格!你這毒婦竟也來了僧免?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捏浊,失蹤者是張志新(化名)和其女友劉穎懂衩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體金踪,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浊洞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胡岔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片法希。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖靶瘸,靈堂內(nèi)的尸體忽然破棺而出苫亦,到底是詐尸還是另有隱情,我是刑警寧澤怨咪,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布屋剑,位于F島的核電站落君,受9級特大地震影響萍肆,放射性物質(zhì)發(fā)生泄漏宙拉。R本人自食惡果不足惜坯苹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一嗓违、第九天 我趴在偏房一處隱蔽的房頂上張望人乓。 院中可真熱鬧社证,春花似錦警医、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逮诲,卻和暖如春帜平,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梅鹦。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工裆甩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人齐唆。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓嗤栓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親箍邮。 傳聞我的和親對象是個殘疾皇子茉帅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359

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