<轉(zhuǎn)>storyboard之 prepareForSegue:sender:

http://leopard168.blog.163.com/blog/static/16847184420142735531836)
在談到storyboard時玲躯,我們多次強調(diào), storyboard 解決的是頁面之間的跳轉(zhuǎn)問題力图。 一個頗為復(fù)雜的頁面跳轉(zhuǎn)固蚤,一旦使用了storyboard,就會四兩撥千斤。你只需簡單地拖拽姻氨,即可完成UIViewController 之間的跳轉(zhuǎn)。 這里面有個神器剪验,一個極為重要的method肴焊,它就是: prepareForSegue:sender:

從method 簡略的表達(dá)式前联,一眼就可看出, 它有2個參數(shù) (arguments)抖韩。為什么說呢蛀恩,因為他有2個冒號嘛。 其實茂浮,這個method 的完整表達(dá)式為:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

第一個參數(shù)是 segue双谆, 第二個參數(shù)是 sender。

這里給出一段代碼實例席揽,展示了這個method 的常用方法顽馋。 這段code 寫在當(dāng)前的ViewController 對應(yīng)的.m 文件中。

這個method 主要解決2個問題:

(1) 獲取所要跳轉(zhuǎn)到的視圖控制器 (ViewController)幌羞;

(2) 同時寸谜,將上一個視圖的數(shù)據(jù),傳遞給下一個視圖属桦。 (比如: 上一個視圖是TableView熊痴, 那么,就要將點擊cell的行號傳遞到下一個視圖)聂宾。

UIViewController *destination = segue.destinationViewController;  

只要是 prepareForSegue:sender: 總會聲明一個目標(biāo)視圖控制器(destination viewcontroller)果善;

獲取到下一個視圖控制器后, 可以跳轉(zhuǎn)過去了系谐。但僅僅跳轉(zhuǎn)還不夠巾陕,總得將數(shù)據(jù)傳遞過去吧。 比如上一個視圖是TableView纪他,當(dāng)用戶點擊某個Cell 進(jìn)入下個頁面時鄙煤,就得將所點擊的cell 行號傳遞給下個頁面。

有一種靈活的傳遞方法茶袒,通過遵循 KVC (Key -Value- Coding)規(guī)則來傳值梯刚。 具體來說薪寓, 就是通過 [viewController setValue: forKey: ] 來存儲數(shù)據(jù)乾巧。 既然提供了存儲方式,就有對應(yīng)的獲取的方式预愤。 以技術(shù)用語表達(dá)沟于,就是: 讀寫操作是成對出現(xiàn)的。有賣植康,就有買旷太。呵

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *destination = segue.destinationViewController;
    if ([destination respondsToSelector:@selector(setDelegate:)]) {
        [destination setValue:self forKey:@"delegate"];
    }
    if ([destination respondsToSelector:@selector(setSelection:)]) {
        // prepare selection info
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        
        id object = self.tasks[indexPath.row];
        NSDictionary *selection = @{@"indexPath" : indexPath,
                                    @"object" : object};
        [destination setValue:selection forKey:@"selection"];
    }
}

前面寫的都是鋪墊,接下來,我們重點談下 prepareForSegue:sender: 的使用供璧。 該方法的觸發(fā)條件是:

當(dāng)前的視圖控制器即將被另一個視圖控制器所替代時存崖,segue將處于激活狀態(tài),從而調(diào)用
prepareForSegue:sender: 方法睡毒。

具體對于TableView來說来惧,當(dāng)某個cell 被點擊時,該cell所對應(yīng)的segue將被激活演顾,同時供搀,這個method將被調(diào)用。我們最關(guān)心的數(shù)據(jù)傳遞問題钠至, 就是利用這個時機完成的葛虐。

在stroyboard技術(shù)出現(xiàn)之前, 數(shù)據(jù)的傳遞將通過 tableview delegate 來實現(xiàn)棉钧,多少有些麻煩吧屿脐。 你可以看到,用storyboard技術(shù)宪卿,技術(shù)這么簡單的诵。 當(dāng)然,你也可以通過button的點擊佑钾,進(jìn)入下一個頁面西疤。 不管怎樣,通過segue就能很輕松地實現(xiàn)視圖的跳轉(zhuǎn)次绘。

回過頭來瘪阁,我們再來仔細(xì)看看這個prepareForSegue:sender: 這個神奇的方法撒遣。

為了區(qū)分視圖的跳轉(zhuǎn)邮偎,可以用上一個、下一個來表示义黎,也可以用源視圖禾进、目標(biāo)視圖來表示。 即: sourceViewController 和destinationViewController廉涕。 目標(biāo)視圖控制器是指:即將顯示(加載)的視圖泻云, 而源視圖控制器是指:即將被取代的視圖控制器。

寫到這里狐蜕,感覺有點偷懶宠纯。 segue雖然實現(xiàn)的是視圖之間的跳轉(zhuǎn),其實是視圖控制器之間的切換层释。 更確切地說婆瓜,segue 實現(xiàn)的是Secene(場景)之間的跳轉(zhuǎn)。

Scene 是由: View 、 ViewController廉白、First Responder个初、Exit 組成的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猴蹂,一起剝皮案震驚了整個濱河市院溺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磅轻,老刑警劉巖珍逸,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓢省,居然都是意外死亡弄息,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門勤婚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摹量,“玉大人,你說我怎么就攤上這事馒胆∮С疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵祝迂,是天一觀的道長睦尽。 經(jīng)常有香客問我,道長型雳,這世上最難降的妖魔是什么当凡? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮纠俭,結(jié)果婚禮上沿量,老公的妹妹穿的比我還像新娘。我一直安慰自己冤荆,他們只是感情好朴则,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钓简,像睡著了一般乌妒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上外邓,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天撤蚊,我揣著相機與錄音,去河邊找鬼损话。 笑死侦啸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匹中,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼夏漱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顶捷?” 一聲冷哼從身側(cè)響起挂绰,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎服赎,沒想到半個月后葵蒂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡重虑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年践付,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缺厉。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡永高,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出提针,到底是詐尸還是另有隱情命爬,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布辐脖,位于F島的核電站饲宛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗜价。R本人自食惡果不足惜艇抠,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望久锥。 院中可真熱鬧家淤,春花似錦、人聲如沸奴拦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽错妖。三九已至,卻和暖如春疚沐,著一層夾襖步出監(jiān)牢的瞬間暂氯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工亮蛔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痴施,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像辣吃,于是被迫代替她去往敵國和親动遭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

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