現(xiàn)在去做一個項目,如果項目時間要求比較急且項目需求不太復(fù)雜朴译,一般會選擇用storyboard去快速創(chuàng)建框架以及各個頁面井佑。
在創(chuàng)建各個頁面后不可避免的就是各個頁面之間的跳轉(zhuǎn)邏輯。在選擇寫這些跳轉(zhuǎn)邏輯方式每個人選擇不盡相同眠寿,只能說各有各的好躬翁。
一,介紹
廢話少說盯拱,直接進(jìn)入正文盒发。這種用storyBoard快速搭建的項目在處理跳轉(zhuǎn)的時候多數(shù)就是用storyBoard中的segue(轉(zhuǎn)場)
segue轉(zhuǎn)場有幾種模式
Show
根據(jù)當(dāng)前屏幕中的內(nèi)容,在master area或者detail area中展示內(nèi)容狡逢。例如:如果app當(dāng)前同時顯示master和detail視圖宁舰,內(nèi)容將會壓入detail區(qū)域。如果app當(dāng)前僅顯示master或者detail視圖奢浑,內(nèi)容則壓入當(dāng)前視圖控制器堆棧中的頂層視圖蛮艰。
Show Detail
在detail area中展現(xiàn)內(nèi)容。例如:即使app同時顯示master和detail視圖雀彼,那么內(nèi)容將被壓入detail區(qū)域如果app當(dāng)前僅顯示Master或者detail視圖壤蚜,那么內(nèi)容將替換當(dāng)前視圖控制器堆棧中的頂層視圖。
Present Modally
使用模態(tài)展示內(nèi)容详羡。屬性面板中提供presentation style (UIModalPresentationStyle)與 transition style (UIModalTransitionStyle)兩種選項
Present as Popover
在某個現(xiàn)有視圖中的錨點處使用彈出框展示內(nèi)容。這個選項可指定顯示在彈出框視圖一邊上的箭頭可用方向嘿悬,同時也是指定錨點視圖的一個選項实柠。
實際運用上show和Present Modally一般就能直接滿足的使用需求。
二善涨,使用
Storyboard創(chuàng)建segue
按住鼠標(biāo)右鍵窒盐,將鼠標(biāo)指針從一個單元樣本拖到新場景上,鼠標(biāo)懸停時將看到整個場景會高亮顯示钢拧,表示可以連接了蟹漓。釋放鼠標(biāo)右鍵并選擇彈出的浮動菜單中Selection Segue位置的show選項。創(chuàng)建segue意味著源内,只要用戶輕點單元樣本葡粒,另一端相連的視圖控制器便會分配內(nèi)存空間并準(zhǔn)備切換。
常用的比如一個按鈕button點擊后的跳轉(zhuǎn)另一個頁面,通常我們是在button點擊事件中創(chuàng)建要跳轉(zhuǎn)頁面的實例對象嗽交,然后push或者present模態(tài)跳轉(zhuǎn)過去卿嘲。storyBoard和xib創(chuàng)建之初的目的初衷就是節(jié)省代碼高效開發(fā),在storyBoard中你只要在你要點擊的按鈕button直接連線到要跳轉(zhuǎn)的頁面就ok了夫壁。
一般show很簡單不需要處理什么拾枣,而Present Modally則需要你選擇跳轉(zhuǎn)時模態(tài)動畫
好了,那么跳轉(zhuǎn)跳轉(zhuǎn)梅肤,跳轉(zhuǎn)過去了夹抗,怎么退出呢彬檀。
注意:要是在view2中button直接連線到要返回的view1,這樣的segue并不是我們想要的轉(zhuǎn)場薄啥,因為這種返回是view2再創(chuàng)建個view1對象撩扒。似扔。。dismiss事件只能寫到代碼里搓谆。有導(dǎo)航欄的情況略有不同炒辉,但在自定義返回鍵的情況下,返回事件還要在代碼處理泉手。
三黔寇,傳值
使用segue轉(zhuǎn)場時,會響應(yīng)-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法斩萌。其中segue就是storyBoard轉(zhuǎn)場控制對象缝裤,在參數(shù)segue中能夠獲取所要跳轉(zhuǎn)的試圖控制器,destinationViewController(目標(biāo)vc)颊郎,sourceViewController(源視圖vc)憋飞。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
secondViewController *secondVC = (secondViewController *)segue.destinationViewController;//要跳轉(zhuǎn)的vc
secondVC.page1Str = _txtField.text;//page1Str是頁面2中接收值的接口字符串對象
}
回傳參數(shù),方式看個人喜歡姆吭,我選擇用block榛做,在頁面2的.h中創(chuàng)建一個block,
- (IBAction)back:(UIButton *)sender {
__weak UITextField *weakTF = _backTextField;
? ? ? ? ? ? if (_backBllock) {
? ? ? ? ? ? ? ? ?_backBllock(weakTF.text);
? ? ? ? ? ? }
? ? ? ? ? ? [self dismissViewControllerAnimated:YES completion:nil];
}
在back按鈕事件傳值内狸,還是在原先頁面1的
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
? ? ? ? ? secondViewController *secondVC = (secondViewController * ?)segue.destinationViewController;
? ? ? ? ? secondVC.backBllock =^(NSString *str){
? ? ? ? ? ? ? ? ? ?NSLog(@"-----%@",str);
? ? ? ? ? ? ? ? ? ?_txtField.text = str;
? ? ? ? ? };
? ? ? ? ? ?secondVC.page1Str = _txtField.text;
}
方法加入block检眯,這樣頁面之間互相傳值成功。個人整理總結(jié)昆淡,喜歡點贊锰瘸,不喜勿噴,謝謝0毫椤避凝!