iOS 中 Storyboard 與 Xib 間控制器跳轉 - 簡化整理完整版
太陽火神的美麗人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商業用途-保持一致”創作公用協議
轉載請保留此句:太陽火神的美麗人生 - 本博客專注於 敏捷開發及移動和物聯設備研究:iOS、Android、Html5、Arduino、pcDuino,否則,出自本博客的文章拒絕轉載或再轉載,謝謝合作。
按以下四種情況分別說明,應該不缺啥了吧!
Xib.controller <=> Xib.controller
Storyboard.controller <=> Storyboard.controller
Storyboard.controller <=> Xib.controller
Xib.controller <=> Storyboard.controller
==========
補充:
Storyboard.controller <=> Storyboard.controller
還有一種特例,就是同一個 Storyboard 中的 controller 間跳轉。
=========
再補充:
復用單元的構建,xib 中或 Storyboard 中。
===============================================================
終極簡化兩步:
一是獲取到視圖控制器實例,只有兩種情況,xib 和 storyboard,代碼直接構建不算手畫界面部分不在討論范疇:
A、從 xib :AaaViewController *aaaViewController = [[AaaViewController alloc] initWithNibName:@"AaaViewController" bundle:nil];
B、從 storyboard :假設 BbbViewController 視圖控制器在 www.storyboard 中,並且其 storyboardid 為 BbbViewController
UIStoryboard *wwwSB = [UIStoryboard storyboardWithName:@"www" bundle:nil];
BbbViewController *bbbViewController = [wwwSB INSTANTIATEvIEWcONTROLLERwITHiDENTIFIER:@"BbbViewController"];
a、簡化一:如果當前控制器和要壓入的控制器在同一個 storyboard 的話,可以省略構建 UIStoryboard ,直接使用 self.storyboard 替代 wwwSB,
一個 storyboard 控制器被加載,其 storyboard 被默認保存為屬性便於使用。
b、簡化二:當 storyboard 中的視圖控制器沒有設置 storyboardid 時,而在該 storyboard 中的控制器間使用 segue 進行了關聯,那么可以執行 segue 完成跳轉,
當然 segue 也需要設置 identifier :
[self performSegueWithIdentifier:@"SegueToPersonCenter" sender:sender];
框架內部直接實例化了這個 identifier 對應的 segue 跳轉到的視圖控制器,那么就會有問題出現了,以往可以自已實例化,然后設置目標控制器的屬性,現在怎么辦?
看下面這個回調方法,在跳轉前會被執行,給一個設置的機會:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
c、簡化三:如果是剛開始為了快速構建控制器間的流轉,也即草圖階段,不關心細節,那么可能連 segue 都不用,直接在按鈕上往目標控制器上一拉選,點按鈕就跳轉了。
二是將此視圖控制器壓入導航控制器堆棧或模態呈現:
這個確實沒什么可說的,與常規一樣,也列一下吧:
[self.navigationController pushViewController:aaaViewController animated:YES];
[self presentViewController:bbbViewController animated:YES completion:^{}];
描述完成,基本沒有遺漏了吧,關鍵的東西都在第一步中,視圖控制器的實例化與設置上,
相對來講,越簡便的方法越受束縛,越麻煩的方法,給你的自由度越高,蘋果在這方面面面俱到了。
可以所有的控制器在一個 storyboard 中,使用 segue 跳轉
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。