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