MVC框架模式html
MVC即model(模型)、view(視圖)和controller(控制器)的縮寫,是一種軟件設計模式,專用於含有圖形化用戶界面的軟件設計,自20世紀80年代以來已經有30多年的歷史了。雖然年過已久,可是歲月這把殺豬刀彷佛並無斬殺多少MVC的活力,時至今日,MVC依舊活躍於當今世界的各大框架中,其中就包括衆所周知的QT、MFC、C#&.Net等等,而且在其基礎上,還衍生出「Hierarchical MVC」(HMVC)、「model-view-adapter」(MVA)等新秀模式。設計模式
MVC具體指的是:將圖形化軟件切分紅model、view和controller共3個部分:數據結構
model:負責數據動態管理和軟件業務邏輯,接收來自controller的操做,並將結果及時傳遞給view。框架
view:直接呈如今用戶面前的信息,好比一張圖片或一段文字。ide
controller:接收來自用戶的輸入,並轉換成相應的命令交給model。函數
MVC的優勢是:3個部分各司其職、責任明確且耦合性低,很大程度上下降了軟件複雜性,從而提升了軟件的質量以及開發效率。佈局
當咱們在用AutoLayout佈局咱們的UI控件的時候,其實咱們就已經在使用MVC的設計方式了。咱們今天的主角UIViewController扮演的正是MVC中的controller。話很少說,咱們先來簡單認識一下UIViewControllerspa
致Android開發者:UIViewController之於iOS如同Activity之於Android,如此形容,想必UIViewController對你來講就沒有什麼神祕的了。設計
響應Button3d
首先,咱們從新建立1個工程「Create a new Xcode project」->「Single View App」->命名工程「Charpter6」
新建工程會默認建立1個UIViewController,且命名爲ViewController(以下圖),咱們看到ViewController默認生成了2個函數有待咱們去完善。
其中didReceiveMemoryWarning用於處理內存告急的警告,以防內存泄漏,咱們會在後續的章節對其進行介紹,此處不表。咱們儘可將其刪除或置之不理。
另外一個函數viewDidLoad是本節的重點,顧名思義,該函數就是用於加載View的。
咱們切換到輔助編輯界面,並打開Main.storyboard,而後拖入一個button到storyboard的ViewController的面板上。
而後,咱們給Button添加上適當的約束(左/上/右邊距0,高50)
接下來咱們要讓Controller和Button產生聯繫,使得Controller能夠經過代碼來引用、修改和響應Button。
首先是在ViewController中建立Button的引用:
使用「Ctrl-拖拽」(長按Ctrl鍵並長按鼠標左鍵拖拽)Storyboard上的Button到代碼中。
Storyboard上UI控件的引用稱爲「Outlet」,即下圖Connection所對應的選項。
Type選擇UIButton,Storage選擇Weak,Name能夠任意指定,此處咱們命名其爲「button」,而後點擊Connect。
這時咱們看到ViewController多出1個成員變量:button,而這就是Storyboard上Button的引用,這樣咱們就能夠經過代碼來修改Button了。
而後是讓ViewController獲取Button的點擊事件:
如法炮製,使用「Ctrl-拖拽」Storyboard上的Button。Storyboard上UI控件的點擊事件稱爲「Action」,即下圖Connection所對應的選項。
Type選擇UIButton,Event選擇Touch Up Inside,Storage選擇Weak,Name能夠任意指定,此處咱們命名其爲「buttonAction」,而後點擊Connect。
這時咱們看到ViewController多出1個成員量函數:buttonAction,而這就是Storyboard上對應Button的點擊事件響應函數,這樣咱們就能夠經過代碼來響應Button點擊了。
如今咱們想讓Button點擊後,改變其內容,即將「Button」改成「俺菜鳥到此一遊」,因而咱們在函數buttonAction中添加1行:
button.setTitle("俺菜鳥到此一遊", for: .normal)
運行效果以下
總結
經過上面的例子,咱們很容易明白UIViewController的工做就是保存UI引用、修改UI、捕獲UI事件等,即扮演着MVC中的「Controller」。而咱們利用Storyboard面板佈局UI控件即「View」,根據業務邏輯設計和管理數據結構以及管控工做流程就造成了「Model」, 經過對這3者的整合能夠很高效的開發出咱們想要的軟件。
源碼下載:https://pan.baidu.com/s/1r6ShruXaiKBZugriILVkzQ