iOS UI基礎(chǔ)補(bǔ)充篇

1.控件

屏幕上的所有UI元素都叫做控件(也有叫做視圖、組件)
比如按鈕(UIButton)、文本(UILabel)都是控件

1.1控件的共同屬性

尺寸
位置
背景色
......
蘋(píng)果將控件的共同屬性都抽取到父類(lèi)UIView中
所有的控件最終都繼承自UIView
UIButton、UILabel都繼承自UIView(查看頭文件驗(yàn)證)

2.UIView

image
@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值向下正向延伸

image

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

image

7.3按鈕的樣式

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

image

在用代碼創(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)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容