關於StoryBoard
IOS5以後Apple供給了一種全新的方法來制造UI,那就是StoryBoard。簡略懂得來講,可以把StoryBoard看作是一組viewController對應的xib,和它們之間的轉換方法的聚集。在StoryBoard中不只可以看到每一個ViewController的結構款式,也能夠明白地曉得各個ViewController之間的轉換關系。絕對於單個的xib,其代碼需求更少,也因為聚集了各個xib,使得關於界面的懂得和修正的速度也獲得了更年夜晉升。削減代碼量就是削減bug量,這也是法式開辟中的真谛之一。
在Xcode5以後,StoryBoard曾經成為新建項目標默許設置裝備擺設,這也代表了Apple對開辟者的建議和將來的偏向。WWDC2013的各個Sample Code中也根本都應用了StoryBoard來停止演示。可以預感到,以後Apple一定會在這方面停止持續強化,而反之純代碼或許單個xib的方法極可能不會再獲得加強。
假如不斟酌IOS版本的支撐(其實說真話如今曾經很少還見到要從IOS4開端支撐的app了吧),如今StoryBoard面對的最年夜成績就是多人協作。由於一切的UI都界說在一個文件中,是以許多開辟者小我或企業的技巧擔任人以為StoryBoard是沒法停止協作開辟的,其實這更多的是一種對StoryBoard的生疏所形成的誤會。固然Apple並沒有在WWDC明白說起,然則沒有人劃定全部項目只能有一個StoryBoard文件。一種可行的做法是將項目標分歧部門分化成若干個StoryBoard,並支配開辟人員對本身的部門停止擔任。簡略舉例好比一個有4個tab功效互相自力的基於UITabBarViewController的運用,完整可使用4個StoryBoard來分離代表4個tab,並在互相無攪擾的情形下完成開辟。如許一來就不會存在所謂的抵觸成績了。StoryBoard的API是如斯簡略,如今的SDK中一共辦法數目一只手就可以數過去,所以詳細辦法在這裡就不再羅嗦了。
StoryBoard的別的的挑釁起源於ViewController的重用和自界說的view的處置。關於前者,在准確封裝接口和優越設計的基本上,其實StoryBoard的VC重用與代碼的VC重用是沒有實質差別的,在StoryBoard中添加封裝優越須要重用的Scene便可處理。而關於後者,由於StoryBoard中曾經不許可有單個view的存在,是以許多時刻我們照樣須要借助於單個的xib來自界說UI。這一點可以說是因為StoryBoard的設計思緒所形成的,StoryBoard更強調的是一種條理構造,是在全局的視角下去組織UI設計和遷徙。而關於單個的view,更多的會重視於重用和定制,而與全部項目標流程沒有太年夜關系。信任捉住這一要點,就可以很好地懂得甚麼時刻應用xib,甚麼時刻應用StoryBoard。
關於StoryBoard最初要說的是,如今會有一些關於StoryBoard機能上的擔心。由於絕對於單個xib來講,StoryBoard文件常常更年夜,加載速度也響應變慢。然則其實跟著如今裝備的更新換代,在iPhone4都難覓的明天,這點機能上的差距簡直可以疏忽了。而再以後的裝備,豈論讀取照樣解析,只會愈來愈快。所以機能上的成績完整是沒有擔憂的需要的。
應用storyboard創立導航掌握器和掌握器的性命周期
1、根本進程
新建一個項目,體系默許的主掌握器繼續自UIViewController,把主掌握器兩個文件刪失落。
在storyboard中,默許的掌握器是View Controller,而我們須要的是導航掌握器,那末就把體系的給刪失落,拖一個導航掌握器出去,導航掌握器中默許的第一個子掌握器是一個tableview controller,這裡不須要,把它刪失落,從新拖三個View Controller到界面長進行連線,簡略的設置便可以了。
按鈕連線,按住ctrl,左邊界面選擇push。
完成根本設置後的界面以下:
經由這麼幾步簡略的設置,便可以完成一個簡略的多頁面切換。為開辟供給了極年夜的便利,但storyboard也不是全能的,要留意在開辟中,假如在最初一個頁面添加一個按鈕,讓它直接跳轉到上一個頁面會湧現成績。
提醒:storyboard能做的工作,應用代碼都能做,然則代碼可以或許做的工作,storyboard紛歧定可以或許做。
經由過程拖沓控件便可完成簡略的界面設置。
上面如許的連線會湧現成績:(從前面的掌握器跳轉到後面,只能經由過程代碼來完成)
發生成績的緣由:(當點擊前往的時刻,不是先把第三個掌握器移除棧頂,而是先創立TWO掌握器,此時棧裡有四個掌握器,棧頂的為TWO).
2、掌握器的性命周期
代碼簡略解釋:
@interface NJOneViewController ()
@property (nonatomic, strong) NSArray *foods;
@end
@implementation NJOneViewController
// 當掌握器的view加載終了就挪用
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1掌握器的view加載終了");
}
// 掌握器的view行將顯示的時刻挪用
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
NSLog(@"1掌握器的view行將顯示");
}
// 掌握器的view完整顯示的時刻挪用
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"1掌握器的view完整顯示");
}
// 掌握器的view行將消逝的時刻挪用
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"1掌握器的view行將消逝");
}
// 掌握器的view完整消逝的時刻挪用
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
NSLog(@"1掌握器的view完整消逝");
}
// 掌握器的view行將燒毀的時刻挪用
- (void)viewWillUnload
{
[super viewWillUnload];
}
// 掌握器的view完整燒毀的時刻挪用
- (void)viewDidUnload
{
[super viewDidUnload];
// 清空不須要的屬性
// [self.foods release];
self.foods = nil;
}
//- (void)setFoods:(NSArray *)foods
//{
// if (_foods != foods) {
// [foods release];
// _foods = [foods retain];
// }
//}
// 吸收到內存正告的時刻挪用
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
/**/
@end
打印成果以下
三個主要的辦法:
// 掌握器的view行將燒毀的時刻挪用
- (void)viewWillUnload
{
[super viewWillUnload];
}
// 掌握器的view完整燒毀的時刻挪用
- (void)viewDidUnload
{
[super viewDidUnload];
// 清空不須要的屬性
// [self.foods release];
self.foods = nil;
}
// 吸收到內存正告的時刻挪用
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
彌補:
兩個內存正告的差別(和署理中得比擬):
署理的內存正告:當application產生一些工作的時刻(吸收到內存正告的時刻),會先告訴它的署理,以後署理會告訴它的Window,Window會告訴它的根掌握器,根掌握器會告訴它的子掌握器。內存正告是由上往下一層一層往下傳的(可以經由過程在兩個處所打印輸入驗證)。
須要懂得它的父類是若何處置內存正告的。
模仿內存正告:
內存正告的處置表示圖:
掌握器的view能否可以燒毀?它怎樣曉得能否可以燒毀呢?若何斷定?它是斷定這個view能否是在Windows下面。
以後one掌握器在棧頂,one掌握器對應的view顯示在window上,假如此時產生內存正告,那末one由於在window下面,所以不會被燒毀。
若此時再來一個two掌握器,它創立對應的twoview顯示到window上,one對應的view移開了,此時假如產生內存正告,則此時oneview曾經不再在window上顯示,所以會被燒毀。
特殊解釋:outlet代表著屬性,當掌握器創立的時刻,屬性普通也是有值的,當挪用了- (void)viewDidUnload辦法今後,即掌握器的view完整燒毀了今後,一切的屬性數據會清空。普通在ios5之前,還會在這個辦法外面清空外面的一切屬性。
提醒:一切的掌握器的這些辦法實際上是一個輪回。
【詳解iOS開辟中應用storyboard創立導航掌握器的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!