1.UIViewController *newController=[[UIViewController alloc] initWithNibName:@"XXX" bundle:nil];中XXX為名字xib的檔名,這個主要用在xib檢視新增到其他檢視中的時候用到,比如自定義UIView,當新增這個自定義View時,新增起xib檔名的要。
2.UIViewController建立時,函式的呼叫順序如下:
[viewDidLoad]
[viewWillAppear:]
[viewWillLayoutSubviews] (iOS之後新API)
[viewDidLayoutSubviews] (IOS之後新API)
[viewDidAppear:]
當UIViewController銷燬時,函式的呼叫順序為:
[viewWillDisappear:]
[viewDidDisappear:]
[viewDidUnload] (IOS6之後不再被系統呼叫)
不過,就像人只出生和死亡一次卻能夠在整個人生的道路上起起伏伏,UIViewController的viewDidLoad和viewDidUnload只會被系統呼叫一次,但是其他幾個方法會隨著主View的狀況,反覆被呼叫。
3UIViewController對於旋轉的支援
UIViewController在支援旋轉時也擁有一套訊息處理函式
算上viewWillLayoutSubviews和viewDidLayoutSubviews兩個函式,這些回撥函式會被系統根據固定的順序觸發呼叫。這個順序會根據具體的作業系統的不同而不同
在IOS5中,此順序如下:
[shouldAutorotateToInterfaceOrientation:]
[willRotateToInterfaceOrientation:duration:]
[viewWillLayoutSubviews]
[viewDidLayoutSubviews]
[willAnimateRotationToInterfaceOrientation:duration:]
[didRotateFromInterfaceOrientation:]
在IOS6中,此順序如下:
[shouldAutorotate]
[supportedInterfaceOrientations]
[willRotateToInterfaceOrientation:duration:]
[viewWillLayoutSubviews]
[viewDidLayoutSubviews]
[willAnimateRotationToInterfaceOrientation:duration:]
[didRotateFromInterfaceOrientation:]
當開始呼叫willRotateToInterfaceOrientation:duration時,當前所有佈局都還沒有變
當開始呼叫willAnimateRotationToInterfaceOrientation:duration:時,所有介面的佈局已經根據autoresize機制或者autolayout機制變更完畢,開發者只是在此函式中可以提供更多的佈局配置
當開始呼叫didRotateFromInterfaceOrientation時,所有關於旋轉的佈局已經全部完成。
3.多層UIViewController
就像UIView可以addSubview和removeFormSuperview般,IOS5之後,UIViewController也能夠進行多層次的疊加
UIViewController的多層程式設計API和UIView相似
-(void)addChildViewController:(UIViewController *)childController -(void)removeFromParentViewController
UIViewController的多層開發比UIView的多層開發更為便捷,之所以這麼說,是因為控制器所能做的事情往往不僅在於動作,更在於系統對於控制器回撥函式的支援力度。
就像UIViewController,如果我們在他的子系統中重寫方法
-(void)willMoveToParentViewController:(UIViewController *)parent -(void)didMoveToParentViewController:(UIViewController *)parent
那麼控制器就能完全掌握多層次疊加和撤銷的過程,作為childViewController的UIViewController物件,會在父UIViewController將自己加到多層結構時呼叫willMoveToParentViewController,會在父UIViewController將自己撤銷多層結構時呼叫didMoveToParentViewController