六、APP開發的主角——UIViewController


MVC框架模式

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:直接呈現在用戶面前的信息,比如一張圖片或一段文字。

controller:接收來自用戶的輸入,並轉換成相應的命令交給model。

 

MVC的優點是:3個部分各司其職、責任明確且耦合性低,很大程度上降低了軟件復雜性,從而提高了軟件的質量以及開發效率。

當我們在用AutoLayout布局我們的UI控件的時候,其實我們就已經在使用MVC的設計方式了。我們今天的主角UIViewController扮演的正是MVC中的controller。話不多說,我們先來簡單認識一下UIViewController

致Android開發者:UIViewController之於iOS如同Activity之於Android,如此形容,想必UIViewController對你來說就沒有什么神秘的了。

 

響應Button

首先,我們重新創建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

 

上一節           回目錄          下一節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM