標籤:
什麼是plist檔案?
在開發中直接將資料寫在代碼裡面 不是一種合理的做法 如果資料經常改變 就需要經常翻開對應的代碼進行修改 造成代碼擴充性低
因此,可以考慮將經常變的資料放在?檔案中進?行儲存,程式啟動後從?檔案中 讀取最新的資料。如果要變動資料,直接修改資料?檔案即可,不?用修改代碼
一般可以使?用屬性列表?檔案儲存體NSArray或者NSDictionary之類的資料,這 種“屬性列表?檔案”的副檔名是plist,因此也稱為“plist?檔案”
在Xcode建立plist檔案的步驟:
解析plist檔案
plist檔案的解析過程
plist的使用注意:
plist的檔案名稱不能叫做 “info” 、“Info” 之類的
添加plist等檔案資源的時候 也就是你將一個檔案拖到項目中的時候 一定要勾選下面的選項:
通過上面的講解 相信你已經知道了 我們從plist解析出來的是一個字典 當我們要擷取資料的時候 就可以直接使用字典中的key 去擷取value但是使用字典是由一定的缺陷的 :? 般情況下,設定資料和取出資料都使?用“字串類型的key”,編寫這些key時,編輯器沒有智能提?示,需要?手敲
dict[@"name"] = @"Jack";NSString *name = dict[@"name"];
- 所謂模型,其實就是資料模型,專門?用來存放資料的對象,?用它來表?示資料會更加專業
- 模型設定資料和取出資料都是通過它的屬性,屬性名稱如果寫錯了,編譯器會馬上報錯,因此,保證了資料的正確性
- 使?用模型訪問屬性時,編譯器會提供?一系列的提?示,提?高編碼效率
如何字典轉模型?字典轉模型的過程
字典轉模型的操作最好封裝在模型內部模型應該提供?一個可以傳?入字典參數的構造?方法一般模型中都會提供這樣兩個構造方法 instancetype● instancetype 在類型表?示上,跟id?一樣,可以表?示任何物件類型
● instancetype只能?用在傳回值類型上,不能像id?一樣?用在參數類型上
● instancetype?比id多?一個好處:編譯器會檢測instancetype的真實類型
類首碼
- 使?用Objective-C開發iOS程式時,最好在每個類名前?面加?一個首碼,?用來標識這個類的“?老家”在哪
- ?目的是防?止N個?人開發了?一樣的類,衝突了
- ?比如Jake Will、Kate Room在同?一個項?目中都各?自開發了個Button類,這樣的程式是不能運?行起來的
- 解決?方案:Jake Will的類名叫做JWButton,Kate Room的類名叫做KRButton
View的封裝如果?一個view內部的?子控制項?比較多,?一般會考慮?自訂?一個view,把它內部?子控制項的建立屏蔽起來,不讓外界關?心 外界可以傳?入對應的模型資料給view,view拿到模型資料後給內部的?子控制項 設定對應的資料 封裝控制項的基本步驟 在initWithFrame:?方法中添加?子控制項,提供便利構造?方法 在layoutSubviews?方法中設定?子控制項的frame(?一定要調?用super的 layoutSubviews) 增加模型屬性,在模型屬性set?方法中設定資料到?子控制項上
Xib和storyboard對?共同點:
- 都?用Interface Builder?工具來編輯
- 本質都是轉換成代碼去建立控制項
不同點:
- Storyboard是重量級的,?用來描述整個軟體的多個界?面,並且能展?示多個界?面之間的跳 轉關係
XIB載入的兩種方式:
使?用xib?自訂view的步驟
- 建立xib檔案 (檔案名稱減一和view的類名一致)
- 增加模型屬性 在模型屬性set方法中設定資料到子控制項上面
注意點:一個控制項有2種建立?方式● 通過代碼建立
- 初始化時?一定會調?用initWithFrame:?方法
● 通過xib\storyboard建立
- 初始化時不會調?用initWithFrame:?方法,只會調?用initWithCoder:?方法- 初始化完畢後會調?用awakeFromNib?方法
● 有時候希望在控制項初始化時做?一些初始化操作,?比如添加?子控制項、設定基本屬性
● 這時需要根據控制項的建立?方式,來選擇在initWithFrame:、initWithCoder:、awakeFromNib的哪個?方法中操作
UIImage 簡單介紹
一個UIImage對象代表一張圖片 一般通過imageNamed:方法就可以通過檔案名稱附加元件目中的圖片
如:
UILabel的基本設定
UIFont 代表字型 常見的建立方法有以下幾個
UIButton、UIImageView、UILabel的選擇特點UIButton
- 既能顯?示?文字,又能顯?示圖?片(能顯?示2張圖?片,背景圖?片、內容圖?片)- 長按?高亮的時候可以切換圖?片\?文字
- 直接通過addTarget...?方法監聽點擊
UIImageView
- 能顯?示圖?片,不能直接通過addTarget...?方法監聽點擊
UILabel
- 能顯?示?文字,不能直接通過addTarget...?方法監聽點擊
選擇
僅僅是顯?示資料,不需要點擊 建議選擇UIImageView、UILabel
不僅顯?示資料,還需要監聽點擊
建議選擇UIButton其實UIImageView、UILabel也可以通過?手勢辨識器來監聽(後?面課程會學)
長按控制項後,會改變顯?示的內容不?用考慮了,選擇UIButton(因為UIButton有highlighted這種狀態)
同時顯?示2張圖?片:背景圖?片、內容圖?片不?用考慮了,選擇UIButton
常用的Xcode外掛程式推薦:http://www.cocoachina.com/industry/20130918/7022.html
如何獲得APP內部資源
- 安裝一個iTools 百度一下就有
- 用USB串連裝置 開啟iTools
- 然後選擇一個應用
補充知識:
## 定時任務- 方法1:performSelector// 1.5s後自動調用self的hideHUD方法[self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];- 方法2:GCDdispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 1.5s後自動執行這個block裡面的代碼 self.hud.alpha = 0.0;});- 方法3:NSTimer// 1.5s後自動調用self的hideHUD方法[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];// repeats如果為YES,意味著每隔1.5s都會調用一次self的hidHUD方法HUD
- - 其他說法:指標、遮蓋、蒙板
- - 半透明HUD的做法
- - 背景色設定為半透明顏色
常見問題
- 項目裡面的某個.m檔案無法使用
- 檢查:Build Phases -> Compile Sources
- 項目裡面的某個資源檔(比如plist、音頻等)無法使用
- 檢查:Build Phases -> Copy Bundle Resources
模型 什麼是模型?
- - 專門用來存放資料的對象
- - 一般都是一些直接繼承自NSObject的純對象
- - 內部會提供一些屬性來存放資料
一個控制項看不見有哪些可能?
- - 寬度或者高度其實為0
- - 位置不對(比如是個負數或者超大的數,已經超出螢幕)
- - hidden == YES
- - alpha <= 0.01
- - 沒有設定背景色、沒有設定內容
- - 可能是文字顏色和背景色一樣
九宮格計算思路
- - 利用控制項的索引index計算出控制項所在的行號和列號
- - 利用列號計算控制項的x值
- - 利用行號計算控制項的y值
本文就分享到這裡了 感謝你的閱讀!
IOS開發UI基礎之Plis檔案-字典轉模型