UI复习
UIButton的狀態(tài)
? normal(普通狀態(tài))
? 默認(rèn)情況
? 對應(yīng)的枚舉常量:UIControlStateNormal
? highlighted(高亮狀態(tài))
? 按鈕被按下去的時候(手指還未松開)
? 對應(yīng)的枚舉常量:UIControlStateHighlighted
? disabled(失效狀態(tài),不可用狀態(tài))
? 如果enabled屬性為NO,就是處于disable狀態(tài),代表按鈕不可以被點擊
?? 對應(yīng)的枚舉常量:UIControlStateDisabled
?
UIButton和UIImageView
? 相同點:都能顯示圖片
? 不同點
? UIButton默認(rèn)情況就能監(jiān)聽點擊事件,而UIImageView默認(rèn)情況下不能
?? UIButton可以在不同狀態(tài)下顯示不同的圖片
? UIButton既能顯示文字,又能顯示圖片
? 如何選擇
? UIButton:需要顯示圖片,點擊圖片后需要做一些特定的操作
? UIImageView:僅僅需要顯示圖片,點擊圖片后不需要做任何事情
?
NSArray和NSDictionary的使用
? 當(dāng)圖片內(nèi)容非常多時,“根據(jù)index來設(shè)置內(nèi)容”的代碼就不具備擴展性,要經(jīng)常改動
? 為了改變現(xiàn)狀,可以考慮講圖片數(shù)據(jù)線保存到一個數(shù)組中,數(shù)組中有序地放著很多字典,
? 一個字典代表一張圖片數(shù)據(jù),包含了圖片名、圖片描述
@property (strong, nonatomic) NSArray *images;
? 由于只需要初始化一次圖片數(shù)據(jù),因此放在get方法中初始化
? 將屬性放在get方法中初始化的方式,稱為“懶加載”\”延遲加載”
?
什么是Plist文件
? 直接將數(shù)據(jù)直接寫在代碼里面,不是一種合理的做法。如果數(shù)據(jù)經(jīng)常改,就 要經(jīng)常翻開對應(yīng)的代碼進(jìn)行修改,造成代碼擴展性低
? 因此,可以考慮將經(jīng)常變的數(shù)據(jù)放在文件中進(jìn)行存儲,程序啟動后從文件中 讀取最新的數(shù)據(jù)。如果要變動數(shù)據(jù),直接修改數(shù)據(jù)文件即可,不用修改代碼
? 一般可以使用屬性列表文件存儲NSArray或者NSDictionary之類的數(shù)據(jù),這種 屬性列表文件的擴展名是plist,因此也成為“Plist文件”
?
搭建九宮格的步驟
? 明確每一塊用的是什么view
? 明確每個view之間的父子關(guān)系
? 先嘗試逐個逐個添加格子,最后考慮使用for循環(huán) ? 加載app數(shù)據(jù),根據(jù)數(shù)據(jù)長度創(chuàng)建對應(yīng)個數(shù)的格子 ? 添加格子內(nèi)部的子控件
? 給格子內(nèi)部的子控件裝配數(shù)據(jù)
?
用模型取代字典的好處
? 使用字典的壞處
? 一般情況下,設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都使用“字符串類型的key”,編寫這些key時,編譯器不會有任何
友善提示,需要手敲
dict[@"name"] = @"Jack";
NSString *name = dict[@"name"];
手敲字符串key,key容易寫錯 Key如果寫錯了,編譯器不會有任何警告和報錯,造成設(shè)錯數(shù)據(jù)或者取錯數(shù)據(jù)
使用模型的好處
?所謂模型,其實就是數(shù)據(jù)模型,專門用來存放數(shù)據(jù)的對象,用它來表示數(shù)據(jù)會更加專業(yè)
?模型設(shè)置數(shù)據(jù)和取出數(shù)據(jù)都是通過它的屬性,屬性名如果寫錯了,編譯器會馬上報錯,因此,保
證了數(shù)據(jù)的正確性
?使用模型訪問屬性時,編譯器會提供一系列的提示,提高編碼效率
app.name = @"Jack”;
NSString *name = app.name;
?
字典轉(zhuǎn)模型
? 字典轉(zhuǎn)模型的過程最好封裝在模型內(nèi)部
? 模型應(yīng)該提供一個可以傳入字典參數(shù)的構(gòu)造方法
-(instancetype)initWithDict:(NSDictionary*)dict; ? +(instancetype)xxxWithDict:(NSDictionary*)dict;
instancetype
? instancetype在類型表示上,跟id一樣,可以表示任何對象類型
? instancetype只能用在返回值類型上,不能像id一樣用在參數(shù)類型上
? instancetype比id多一個好處:編譯器會檢測instancetype的真實類型
?
Xib文件的使用
? Xib文件可以用來描述某一塊局部的UI界面
? Xib文件的加載
?? 方法1
NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil
options:nil];
這個方法會創(chuàng)建xib中的所有對象,并且將對象按順序放到objs數(shù)組中 (如果xib如右圖所?示,那么objs數(shù)組中依次會有3個對象:1個UIView、1個UIButton、1個UISwitch)
? 方法2 bundle參數(shù)可以為nil,默認(rèn)就是main bundle
UINib *nib = [UINib nibWithNibName:@"MJAppView" bundle:[NSBundle mainBundle]];
NSArray *objs = [nib instantiateWithOwner:nil options:nil];
? 在開發(fā)階段,面向開發(fā)者的是xib文件; 當(dāng)把應(yīng)用裝到手機上時,xib文件就會轉(zhuǎn)為nib文件
隨意調(diào)整view的尺寸
? 要想隨意調(diào)整xib中view的尺寸,首先要設(shè)置size為Freeform
?
Xib和storyboard對比
? 共同點:
? 都用來描述軟件界面
? 都用Interface Builder工具來編輯
? 不同點
? Xib是輕量級的,用來描述局部的UI界面
? Storyboard是重量級的,用來描述整個軟件的多個界面,并且能展示多個界面之間的跳 轉(zhuǎn)關(guān)系
?
view的封裝
? 如果一個view內(nèi)部的子控件比較多,一般會考慮自定義一個view,把它內(nèi)部 子控件的創(chuàng)建屏蔽起來,不讓外界關(guān)心
? 外界可以傳入對應(yīng)的模型數(shù)據(jù)給view,view拿到模型數(shù)據(jù)后給內(nèi)部的子控件設(shè)置對應(yīng)的數(shù)據(jù)
?
UILabel的常見設(shè)置
? @property(nonatomic,copy) NSString
? 顯示的文字
? @property(nonatomic,retain)UIFont
? 字體
? @property(nonatomic,retain) UIColor
? 文字顏色
*text;
*font;
*textColor;
? @property(nonatomic) NSTextAlignment textAlignment;
? 對齊模式(比如左對齊、居中對齊、右對齊)
UIFont
? UIFont代表字體,常見創(chuàng)建方法有以下幾個:
? + (UIFont *)systemFontOfSize:(CGFloat)fontSize; 系統(tǒng)默認(rèn)字體
? + (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize; 粗體
? + (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize; 斜體
UIButton的常見設(shè)置
? - (void)setTitle:(NSString *)title forState:(UIControlState)state;
? 設(shè)置按鈕的文字
? - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
?? 設(shè)置按鈕的文字顏色
? -(void)setImage:(UIImage*)imageforState:(UIControlState)state;
? 設(shè)置按鈕內(nèi)部的小圖片
? - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;
? 設(shè)置按鈕的背景圖片
? 設(shè)置按鈕的文字字體(需要拿到按鈕內(nèi)部的label來設(shè)置)
? btn.titleLabel.font=[UIFontsystemFontOfSize:13];
?
UIButton的常見設(shè)置
? -(NSString*)titleForState:(UIControlState)state;
? 獲得按鈕的文字
? - (UIColor *)titleColorForState:(UIControlState)state;
? 獲得按鈕的文字顏色
? - (UIImage *)imageForState:(UIControlState)state;
?? 獲得按鈕內(nèi)部的小圖片
? - (UIImage *)backgroundImageForState:(UIControlState)state;
? 獲得按鈕的背景圖片
?
轉(zhuǎn)載于:https://www.cnblogs.com/ljcgood66/p/4988828.html
總結(jié)
- 上一篇: BZOJ 3156: 防御准备( dp
- 下一篇: [转]response.getWrite