1-2基础控件
什么是UIImageView
UIKit框架提供了非常多的UI控件,但并不是每一個(gè)都很常用,有些控件可能1年內(nèi)都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
UIImageView極其常用,功能比較專一:顯示圖片
什么是UILabel
UILabel極其常用,功能比較專一:顯示文字
?
什么是按鈕
還有一個(gè)非常重要的UI控件---UIButton,俗稱“按鈕”,一般情況下,點(diǎn)擊某個(gè)控件后,會(huì)做出相應(yīng)反應(yīng)的都是按鈕
按鈕的功能比較多,既能顯示文字,又能顯示圖片,還能隨時(shí)調(diào)整內(nèi)部圖片和文字的位置
?
UIButton的狀態(tài)
normal(普通狀態(tài))
默認(rèn)情況(Default)
對(duì)應(yīng)的枚舉常量:UIControlStateNormal
highlighted(高亮狀態(tài))
按鈕被按下去的時(shí)候(手指還未松開)
對(duì)應(yīng)的枚舉常量:UIControlStateHighlighted
disabled(失效狀態(tài),不可用狀態(tài))
如果enabled屬性為NO,就是處于disable狀態(tài),代表按鈕不可以被點(diǎn)擊
對(duì)應(yīng)的枚舉常量:UIControlStateDisabled
設(shè)置按鈕的背景圖片
設(shè)置按鈕在不同狀態(tài)下的背景圖片(為了保證高亮狀態(tài)下的圖片正常顯示,必須設(shè)置按鈕的type為custom)
按鈕的樣式
實(shí)際上,UIButton自帶了很多種不同的樣式
在用代碼創(chuàng)建按鈕的同時(shí)指定按鈕樣式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonTypeCustom:無(wú)類型,按鈕的內(nèi)容需要自定義
UIButtonTypeDetailDisclosure:
UIButtonTypeInfoLight:
UIButtonTypeInfoDark:
UIButtonTypeContactAdd:
UIButton的常見設(shè)置
?
Storyboard到代碼的轉(zhuǎn)換
// 創(chuàng)建一個(gè)自定義的按鈕UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];// 默認(rèn)狀態(tài)的背景[btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];// 默認(rèn)狀態(tài)的文字[btn setTitle:@"點(diǎn)我啊" forState:UIControlStateNormal];// 默認(rèn)狀態(tài)的文字顏色[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
?
九宮格計(jì)算思路
?
HUD/指示器/蒙版/遮蓋
//顯示HUDNSString *text = nil;if(self.removeBtn.enabled == NO){text = @"表示已經(jīng)刪光了";}elseif(self.addBtn.enabled == NO){text = @"表示已經(jīng)添加滿了";}// if(text == nil) return;if(text){self.hud.text = text;self.hud.alpha = 1;dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(1.5*NSEC_PER_SEC)),dispatch_get_main_queue(),^{self.hud.alpha = 0.0;});}?
?
什么是Plist文件
直接將數(shù)據(jù)直接寫在代碼里面,不是一種合理的做法。如果數(shù)據(jù)經(jīng)常改,就要經(jīng)常翻開對(duì)應(yīng)的代碼進(jìn)行修改,造成代碼擴(kuò)展性低
因此,可以考慮將經(jīng)常變的數(shù)據(jù)放在文件中進(jìn)行存儲(chǔ),程序啟動(dòng)后從文件中讀取最新的數(shù)據(jù)。如果要變動(dòng)數(shù)據(jù),直接修改數(shù)據(jù)文件即可,不用修改代碼
一般可以使用屬性列表文件存儲(chǔ)NSArray或者NSDictionary之類的數(shù)據(jù),這種“屬性列表文件”的擴(kuò)展名是plist,因此也稱為“plist文件”
創(chuàng)建Plist文件
?
解析Plist文件
接下來(lái)通過(guò)代碼來(lái)解析Plist文件中的數(shù)據(jù)
獲得Plist文件的全路徑
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];
加載plist文件
_shops = [NSArray arrayWithContentsOfFile:path];
Plist文件的解析過(guò)程
Plist的使用注意
plist的文件名不能叫做“info”、“Info”之類的
添加plist等文件資源的時(shí)候,一定要勾選下面的選項(xiàng)
用模型取代字典的好處
使用字典的壞處:一般情況下,設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都使用“字符串類型的key”,編寫這些key時(shí),編輯器沒(méi)有智能提示,需要手敲
dict[@"name"] = @"Jack";
NSString *name = dict[@"name"];
手敲字符串key,key容易寫錯(cuò), Key如果寫錯(cuò)了,編譯器不會(huì)有任何警告和報(bào)錯(cuò),造成設(shè)錯(cuò)數(shù)據(jù)或者取錯(cuò)數(shù)據(jù)
使用模型的好處:所謂模型,其實(shí)就是數(shù)據(jù)模型,專門用來(lái)存放數(shù)據(jù)的對(duì)象,用它來(lái)表示數(shù)據(jù)會(huì)更加專業(yè)
模型設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都是通過(guò)它的屬性,屬性名如果寫錯(cuò)了,編譯器會(huì)馬上報(bào)錯(cuò),因此,保證了數(shù)據(jù)的正確性
使用模型訪問(wèn)屬性時(shí),編譯器會(huì)提供一系列的提示,提高編碼效率
app.name = @"Jack";
NSString *name = app.name;
字典轉(zhuǎn)模型
字典轉(zhuǎn)模型的過(guò)程最好封裝在模型內(nèi)部
模型應(yīng)該提供一個(gè)可以傳入字典參數(shù)的構(gòu)造方法
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)xxxWithDict:(NSDictionary *)dict;
instancetype
instancetype在類型表示上,跟id一樣,可以表示任何對(duì)象類型
instancetype只能用在返回值類型上,不能像id一樣用在參數(shù)類型上
instancetype比id多一個(gè)好處:編譯器會(huì)檢測(cè)instancetype的真實(shí)類型
類前綴
使用Objective-C開發(fā)iOS程序時(shí),最好在每個(gè)類名前面加一個(gè)前綴,用來(lái)標(biāo)識(shí)這個(gè)類的“老家”在哪
目的是防止N個(gè)人開發(fā)了一樣的類,沖突了
比如Jake Will、Kate Room在同一個(gè)項(xiàng)目中都各自開發(fā)了個(gè)Button類,這樣的程序是不能運(yùn)行起來(lái)的
解決方案:Jake Will的類名叫做JWButton,Kate Room的類名叫做KRButton
字典轉(zhuǎn)模型的過(guò)程
?
view的封裝
如果一個(gè)view內(nèi)部的子控件比較多,一般會(huì)考慮自定義一個(gè)view,把它內(nèi)部子控件的創(chuàng)建屏蔽起來(lái),不讓外界關(guān)心
外界可以傳入對(duì)應(yīng)的模型數(shù)據(jù)給view,view拿到模型數(shù)據(jù)后給內(nèi)部的子控件設(shè)置對(duì)應(yīng)的數(shù)據(jù)
封裝控件的基本步驟
在initWithFrame:方法中添加子控件,提供便利構(gòu)造方法
在layoutSubviews方法中設(shè)置子控件的frame(一定要調(diào)用super的layoutSubviews)
增加模型屬性,在模型屬性set方法中設(shè)置數(shù)據(jù)到子控件上
簡(jiǎn)單的MVC
?
Xib和storyboard對(duì)比
? 共同點(diǎn):
都用來(lái)描述軟件界面
都用Interface Builder工具來(lái)編輯
本質(zhì)都是轉(zhuǎn)換成代碼去創(chuàng)建控件
? 不同點(diǎn)
Xib是輕量級(jí)的,用來(lái)描述局部的UI界面
Storyboard是重量級(jí)的,用來(lái)描述整個(gè)軟件的多個(gè)界面,并且能展示多個(gè)界面之間的跳轉(zhuǎn)關(guān)系
Xib的加載
?
使用xib自定義view的步驟
新建自定義控件類
新建xib文件(文件名建議和view的類名一致)
?
修改xib中view的類名
封裝xib的加載過(guò)程
在類擴(kuò)展中增加子控件屬性,然后關(guān)聯(lián)子xib中子控件
@interface XMGShopView()
@property(weak,nonatomic)IBOutlet UIImageView *iconView;
@property(weak,nonatomic)IBOutlet UIlabel *nameLabel;
@end
增加模型屬性,在模型屬性set方法中設(shè)置數(shù)據(jù)到子控件上
?
注意點(diǎn)
一個(gè)控件有2種創(chuàng)建方式
通過(guò)代碼創(chuàng)建,初始化時(shí)一定會(huì)調(diào)用initWithFrame:方法
通過(guò)xib\storyboard創(chuàng)建
初始化時(shí)不會(huì)調(diào)用initWithFrame:方法,只會(huì)調(diào)用initWithCoder:方法
初始化完畢后會(huì)調(diào)用awakeFromNib方法
有時(shí)候希望在控件初始化時(shí)做一些初始化操作,比如添加子控件、設(shè)置基本屬性
這時(shí)需要根據(jù)控件的創(chuàng)建方式,來(lái)選擇在initWithFrame:、initWithCoder:、awakeFromNib的哪個(gè)方法中操作
UIImage
一個(gè)UIImage對(duì)象代表一張圖片,一般通過(guò)imageNamed:方法就可以通過(guò)文件名加載項(xiàng)目中的圖片
UIImage *image = [UIImage imageNamed:@"lufy"];
UILabel的基本設(shè)置
要想讓UILabel自動(dòng)換行,設(shè)置Lines為0即可
讓UILabel的文字居中顯示
@property(nonatomic,copy) NSString *text; //顯示的文字 @property(nonatomic,retain) UIFont *font; //字體 @property(nonatomic,retain) UIColor *textColor; //文字顏色 @property(nonatomic) NSTextAlignment textAlignment; //對(duì)齊模式(比如左對(duì)齊、居中對(duì)齊、右對(duì)齊)
?
UIFont
UIFont代表字體,常見創(chuàng)建方法有以下幾個(gè):
?
UIButton、UIImageView、UILabel的選擇
特點(diǎn)
UIButton
既能顯示文字,又能顯示圖片(能顯示2張圖片,背景圖片、內(nèi)容圖片)
長(zhǎng)按高亮的時(shí)候可以切換圖片\文字
直接通過(guò)addTarget...方法監(jiān)聽點(diǎn)擊
UIImageView
能顯示圖片,不能直接通過(guò)addTarget...方法監(jiān)聽點(diǎn)擊
UILabel
能顯示文字,不能直接通過(guò)addTarget...方法監(jiān)聽點(diǎn)擊
選擇
僅僅是顯示數(shù)據(jù),不需要點(diǎn)擊
建議選擇UIImageView、UILabel
不僅顯示數(shù)據(jù),還需要監(jiān)聽點(diǎn)擊
建議選擇UIButton
其實(shí)UIImageView、UILabel也可以通過(guò)手勢(shì)識(shí)別器來(lái)監(jiān)聽(后面課程會(huì)學(xué))
長(zhǎng)按控件后,會(huì)改變顯示的內(nèi)容
不用考慮了,選擇UIButton(因?yàn)閁IButton有highlighted這種狀態(tài))
同時(shí)顯示2張圖片:背景圖片、內(nèi)容圖片
不用考慮了,選擇UIButton
常用的Xcode插件
Xcode插件大全
http://www.cocoachina.com/industry/20130918/7022.html
必備
文檔注釋生成:https://github.com/onevcat/VVDocumenter-Xcode
自動(dòng)檢索圖片名:https://github.com/ksuther/KSImageNamed-Xcode
取色:https://github.com/omz/ColorSense-for-Xcode
插件管理工具:https://github.com/mneorr/Alcatraz
???? 移除插件(可以使用上面提到的插件管理工具Alcatraz)
到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夾中刪除
???? 插件失效修復(fù):http://joeshang.github.io/2015/04/10/fix-xcode-upgrade-plugin-invalid/
如何獲得APP內(nèi)部資源
安裝一個(gè)iTools(百度一下就有)
用USB連接設(shè)備,打開iTools
?
轉(zhuǎn)載于:https://www.cnblogs.com/laugh/p/6364607.html
總結(jié)
- 上一篇: matlab 矩阵拼接
- 下一篇: 日常总结(4)