1.控件
屏幕上的所有UI元素都叫做控件(也有叫做視圖、組件)
比如按鈕(UIButton)、文本(UILabel)都是控件
1.1控件的共同屬性
尺寸
位置
背景色
......
蘋(píng)果將控件的共同屬性都抽取到父類(lèi)UIView中
所有的控件最終都繼承自UIView
UIButton、UILabel都繼承自UIView(查看頭文件驗(yàn)證)
2.UIView

@property(nonatomic,readonly) UIView *superview;
獲得自己的父控件對(duì)象
@property(nonatomic,readonly,copy) NSArray *subviews;
獲得自己的所有子控件對(duì)象
@property(nonatomic) NSInteger tag;
控件的ID(標(biāo)識(shí)),父控件可以通過(guò)tag來(lái)找到對(duì)應(yīng)的子控件
@property(nonatomic) CGAffineTransform transform; // 仿射變換
控件的形變屬性(可以設(shè)置旋轉(zhuǎn)角度、比例縮放、平移等屬性)
- (void)addSubview:(UIView *)view;
添加一個(gè)子控件view
- (void)removeFromSuperview;
從父控件中移除
- (UIView *)viewWithTag:(NSInteger)tag;
根據(jù)一個(gè)tag標(biāo)識(shí)找出對(duì)應(yīng)的控件(一般都是子控件)
@property(nonatomic) CGRect frame;
控件矩形框在父控件中的位置和尺寸(以父控件的左上角為坐標(biāo)原點(diǎn))
@property(nonatomic) CGRect bounds;
控件矩形框的位置和尺寸(以自己左上角為坐標(biāo)原點(diǎn),所以bounds的x、y為0)
@property(nonatomic) CGPoint center;
控件中點(diǎn)的位置(以父控件的左上角為坐標(biāo)原點(diǎn))
3.父控件 子控件
每個(gè)控件都是個(gè)容器,能容納其他控件
內(nèi)部小控件是大控件的子控件
大控件是內(nèi)部小控件的父控件
每一個(gè)控制器(UIViewController)內(nèi)部都有個(gè)默認(rèn)的UIView屬性
@property(nonatomic,retain) UIView *view;
控制器中管理的其他所有控件都是這個(gè)view的子控件(直接或者間接)
4.UIKit坐標(biāo)系
在UIKit中,坐標(biāo)系的原點(diǎn)(0,0)在左上角,x值向右正向延伸,y值向下正向延伸

5.UIImageView
UIKit框架提供了非常多的UI控件,但并不是每一個(gè)都很常用,有些控件可能1年內(nèi)都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
UIImageView極其常用,功能比較專(zhuān)一:顯示圖片
6.UILabel
UILabel極其常用,功能比較專(zhuān)一:顯示文字
7.UIButton
一般情況下,點(diǎn)擊某個(gè)控件后,會(huì)做出相應(yīng)反應(yīng)的都是按鈕
按鈕的功能比較多,既能顯示文字,又能顯示圖片,還能隨時(shí)調(diào)整內(nèi)部圖片和文字的位置
7.1按鈕的狀態(tài)
normal(普通狀態(tài))
默認(rèn)情況(Default)
對(duì)應(yīng)的枚舉常量:UIControlStateNormal
highlighted(高亮狀態(tài))
按鈕被按下去的時(shí)候(手指還未松開(kāi))
對(duì)應(yīng)的枚舉常量:UIControlStateHighlighted
disabled(失效狀態(tài),不可用狀態(tài))
如果enabled屬性為NO,就是處于disable狀態(tài),代表按鈕不可以被點(diǎn)擊
對(duì)應(yīng)的枚舉常量:UIControlStateDisabled
7.2設(shè)置按鈕的背景圖片
設(shè)置按鈕在不同狀態(tài)下的背景圖片
為了保證高亮狀態(tài)下的圖片正常顯示,必須設(shè)置按鈕的type為custom

7.3按鈕的樣式
UIButton自帶了很多種不同的樣式

在用代碼創(chuàng)建按鈕的同時(shí)指定按鈕樣式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonTypeCustom:無(wú)類(lèi)型,按鈕的內(nèi)容需要自定義
UIButtonTypeDetailDisclosure:
UIButtonTypeInfoLight:
UIButtonTypeInfoDark:
UIButtonTypeContactAdd:
7.4UIButton的常見(jiàn)設(shè)置
- (void)setTitle:(NSString *)title forState:(UIControlState)state;
設(shè)置按鈕的文字
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
設(shè)置按鈕的文字顏色
- (void)setImage:(UIImage *)image forState:(UIControlState)state;
設(shè)置按鈕內(nèi)部的小圖片
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;
設(shè)置按鈕的背景圖片
btn.titleLabel.font = [UIFont systemFontOfSize:13];
設(shè)置按鈕的文字字體(需要拿到按鈕內(nèi)部的label來(lái)設(shè)置)
- (NSString *)titleForState:(UIControlState)state;
獲得按鈕的文字
- (UIColor *)titleColorForState:(UIControlState)state;
獲得按鈕的文字顏色
- (UIImage *)imageForState:(UIControlState)state;
獲得按鈕內(nèi)部的小圖片
- (UIImage *)backgroundImageForState:(UIControlState)state;
獲得按鈕的背景圖片
8.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ù)
封裝控件的基本步驟
1>在initWithFrame:方法中添加子控件,提供便利構(gòu)造方法
2>在layoutSubviews方法中設(shè)置子控件的frame(一定要調(diào)用super的layoutSubviews)
3>增加模型屬性,在模型屬性set方法中設(shè)置數(shù)據(jù)到子控件上
9.Xib & Storyboard
共同點(diǎn)
1.都用來(lái)描述軟件界面
2.都用Interface Builder工具來(lái)編輯
3.本質(zhì)都是轉(zhuǎn)換成代碼去創(chuàng)建控件
不同點(diǎn)
1.Xib是輕量級(jí)的,用來(lái)描述局部的UI界面
2.Storyboard是重量級(jí)的,用來(lái)描述整個(gè)軟件的多個(gè)界面,并且能展示多個(gè)界面之間的跳轉(zhuǎn)關(guān)系
9.1Xib的加載
方法1
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名"
owner:nil
options:nil];
方法2
UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];
作者:solozyx
鏈接:http://www.itdecent.cn/p/bf1383097913
來(lái)源:簡(jiǎn)書(shū)
簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。