@ViewController
幾種設計模式:
MVC:MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
MVP:從經(jīng)典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數(shù)據(jù),View負責顯示。作為一種新的模式,MVP與MVC有著一個重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進行的,所有的交互都發(fā)生在Presenter內部,而在MVC中View會直接從Model中讀取數(shù)據(jù)而不是通過 Controller(Model+Presenter+data binding).
MVVM:MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術體驗,如Silverlight、音頻、視頻、3D、動畫……,這導致了軟件UI層更加細節(jié)化、可定制化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發(fā)展演變過來的一種新型架構框架。它立足于原有MVP框架并且把WPF的新特性糅合進去,以應對客戶日益復雜的需求變化(Model View Model +two way data binding)。
后面會做更為詳細的說明,這里不再贅述。
UIViewcontroller:它是用來管理界面View的控制器。
UIViewcontroller功能主要有:傳遞數(shù)據(jù)(在各個view中傳遞,在model和view之間傳遞),響應用戶操作,內存管理、狀態(tài)保持和適應設備(phone,pad等)。
界面View的創(chuàng)建:可通過Mainstoryboard或NSmainNibFile來創(chuàng)建(_loadMainStroyboardFileNamed:bundle或_loadMainNibFileNamed:bundle),如果沒有這兩個,用程序來初始化界面(didlaunch)否則則得到window為nil(黑屏)。
View Controller怎么創(chuàng)建其界面View:
從上圖可以看出,View Controller用系統(tǒng)方法及UI方法或是xib方法(找尋view controller相關名字的nib創(chuàng)建),如果匹配不到則用UIView來創(chuàng)建空白視圖。
ViewController的生命周期:ViewController生命周期會經(jīng)歷初始化、加載視圖、銷毀視圖、生命結束等過程。
多個view controller
@Storyboard
Storyboard是一個用來管理各個View(或稱為Scene)之間跳轉或聯(lián)系的一個東西,本質上storyboard是一個XML文件。下面來介紹storyboard一些功能。
is initial View Controller:主要用于定那個View為Storyboard的初始窗口,當只有一個View時又沒有定義初始窗口時,打開App調用Storyboard時會顯示黑屏(因為找不到需要調用的初始窗口)。
Segue:用于建立場景之間的跳轉。可以用在storyboard中直接在兩個view中Ctrl+拖動button或直接右鍵建立Segue。這樣可以輕松在兩個view中跳轉。還有一個問題需要說明,就是要定義設置Segue的Indentifier,這樣才能在代碼中訪問該Segue。還可以用代碼來實現(xiàn)view之間的跳轉,如下:
-(void)viewDidAppear:(BOOL)animated
{[self performSegueWithIdentifier:@"drawecg" sender:self];}
-[UIStoryboard storyboardWithName:bundle:]加載stroyboard的一個方法,主要用來實現(xiàn)不同storyboard中view的跳轉,如下圖:
Unwinding Segue:用來跳轉回到之前的view中(反向傳遞數(shù)據(jù)給之前的View)。如下:
- (IBAction)unwindSegueToRedViewController:(UIStoryboardSegue *)segue {? }
接著在Viewcontroller的Exit建立連接,連接到它的觸發(fā)條件上。
正向傳遞可以用prepareForSegue。
多個storyboard
實際應用中,場景可能很多,所以可能需要多個storyboard方便管理。storyboard可以通過library的組件直接建立,也可以新建來建立。
@App Lifecycle
所謂生命周期,其實就是指從App啟動到關閉這一過程中所發(fā)生的一系列事件。由于iOS 4之后引入了多任務功能,App能夠在后臺執(zhí)行,而?iOS 3 是沒有多任務功能的,故兩者的生命周期并不相同。
- (void)applicationDidEnterBackground:(UIApplication *)application方法有大概5秒的時間讓你完成這些任務。如果超過時間還有未完成的任務,你的程序就會被終止而且從內存中清除。
如果還需要長時間的運行任務,可以在該方法中調用
[application beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"begin Background Task With Expiration Handler");}];
Xcodet調試功能
@Navigation Bar
導航欄
看到的controller不一定是top controller
用代碼創(chuàng)建、跳轉和設置控制nav
設置和控制(delegate,viewcontroller,navigation,toolbar)
navigation的界面定制:
Navigation的結構:
可以放在navigation bar的按鈕都是繼承自UIBarButtonItem(可用圖片作為按鈕,這些按鈕一般是有實際作用的)
Navigation還可以放toolbar
[UIView appearance].tintColor=[UIColor redColor];
Bar占界面,如何將Bar藏起來(On tap等選項)
@Tabbar
UITabBarController:管理一堆view controller
UITabBarController的構成:viewcontrollers,customizableViewControllers(NSArray),selectedViewController,delegate。
UITabarItem屬性調節(jié)設置(Title 和 Image,button中既有圖片又有文字,與Navigation不一樣的地方)
直接用tabbar的模式可以生成一個帶有Tabbar的View
或和navigation一樣用embed in來添加
太多的TabBarItem時,會自動歸到more中,可以自己選擇哪個顯示,哪個不顯示
UITabBarControllerDelegate:如何設置跳轉前詢問是否跳轉
代碼創(chuàng)建,管理與選中分頁
簡單定制:system Item
怎么用代碼創(chuàng)建TabBarItem