UI 第三天 自定義視圖 視圖控制器

  1. 自定義視圖
  2. 視圖控制器指定自定義View
  3. 檢測屏幕旋轉
  4. 處理內存警告
  5. 容器視圖控制器

一.自定義Label - textField 視圖
對應我們程序員來說我們不僅需要實現功能,還需要寫出高質量的代碼
高質量代碼的特點: 可複用,可移植,等. 比如說這個工程我要用到的東西, 可以移植到另一個工程(有相似界面的過程),直接就可以用了.
爲了達到高質量代碼的目的,很多時候我們需要對代碼進行優化,這個時候就要用到自定義視圖.
自定義視圖:顧名思義 就是自己組合定義的新的視圖
好處:提高工作效率 大大提高代碼的複用性

登錄界面大家肯定都看到過,它的特點是: 一個UITextField前緊跟着一個UILable
我們可以用自定義視圖的方法,將UITextField,UILabel封裝一起,以後創建自定義視圖,就有這兩個了.
自定義視圖的步驟:
1. 創建一個繼承於UIView的子類
2. 重寫子類的自定義初始化方法(這個初始化方法是用來添加你想要組合的控件)
3. 把想添加的控件(視圖) 封裝到新的子類裏面(在裏面進行初始化)

當然需要的話,也可以把這個自定義視圖繼續封裝到另一個子視圖

切記:如果用循環創建視圖的話,需要用到tag, 將相應的屬性(聲明好的)與循環的那個相關聯
這裏還需要注意的是各個iphone設備的大小不一樣,所以很多時候我們不會直接指定視圖具體的frame, 很多時候是用獲取的屏幕的寬高來寫,這是就需要用到宏替換,宏替換很多時候讓我們修改起來也會比較方便

二.視圖控制器 UIViewController
作用: 控制視圖顯示,響應事件 實現模塊獨立,提高複用性
主要功能: 控制視圖大小變換,佈局視圖,響應事件
檢測以及處理內存警告
檢測已經處理屏幕旋轉
檢測視圖的切換

這裏不得不提到MVC模式 ,UIViewController是MVC的核心
MVC是一種設計模式,一種思想
優點:視圖複用, 降低耦合度
應用:
1. 視圖層(UIView)只寫視圖的佈局
2. 數據模型層(model)只寫數據的結構(只寫NS開頭的)
3. 控制器(Controller)負責邏輯部分(例如從medel取出數據 然後去更改視圖的顯示)
MVC把工程中的代碼模塊化(降低耦合度)儘量讓視圖部分的代碼可以複用 一般一個視圖控制器控制一個頁面
步驟:
1.創建一個根視圖控制器
2.給window設置一個根視圖控制器
3.設置根視圖控制器 = 新建的根視圖控制器
4.在控制器中實現邏輯

loadView 加載視圖方法 調用父類的加載方法 或者加載自定義的視圖
每一個視圖控制器都自帶一個view 並且這個view跟屏幕一樣 viewDidLoad 視圖已經加載完成 一般在這裏裏面寫東西

三. 屏幕旋轉
屏幕橫屏時 改變原來的佈局
屏幕豎屏時 改回原來的佈局
步驟: 1. 允許屏幕旋轉 shouldAutorotate
2. 指定屏幕旋轉的方向 正常 頭朝下 左 右
3. 找到旋轉時觸發的方法 (旋轉時屏幕的寬高發生變化)
4. 判斷屏幕方向 改變佈局
5. 測試
第4步具體的是: 重新佈局子視圖 frame發生變化的時候會觸發layoutSubViews方法
frame發生變化 相當於橫屏豎屏發生變化 這時需要重新佈局 判 斷橫屏還是豎屏
a.把應用程序取出來 UIApplication
b. 判斷一下當前的應用程序 屏幕的朝向
記: 單例的方法的命名規範share什麼
切記:判斷橫豎屏後改變frame,而不是重寫初始化一個新的出來

四.內存警告
內存警告有一個方法:didReceiveMemoryWaring
內存警告後需要我們釋放已經顯示過的視圖 並且不是當前顯示的視圖 如果這個視圖正在被顯示 那麼這個視圖的window的屬性不能爲空

視圖聲明週期: 將要出現 已經出現 將要消失 已經消失

五.容器視圖控制器
相當於一個數組,把試圖控制器放在裏面

需要注意的:
一個Controller一般對應會有相應的一個view(顯示視圖的,不是自帶的那個)
一般調用方法時,如果沒有父類方法的,很多時候需要調用父類方法(後面沒有參數的一般都要)
添加視圖時,需要注意視圖覆蓋的問題,有時需要把後添加的視圖放在最後面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章