第一個(gè)ios程序
1 @interface ViewController : UIViewController 2 3 @PRoperty(nonatomic, weak)IBOutlet UILabel *lable; 4 5 @end 6 7 8 9 @interface ViewController ()10 11 @end12 13 @implementation ViewController14 15 /**16 紅色按鈕17 */18 - (IBAction)redBtnClick19 {20 // -[ViewController redBtnClick]21 NSLog(@"%s", __func__);22 // 拿到UILabel對(duì)象, 修改對(duì)象的屬性, 讓label對(duì)象變?yōu)榧t色23 self.lable.textColor = [UIColor redColor];24 self.lable.text = @"我是紅色文字";25 self.lable.backgroundColor = [UIColor purpleColor];26 self.lable.font = [UIFont systemFontOfSize:30];27 self.lable.textAlignment = NSTextAlignmentCenter;28 }29 /**30 綠色按鈕31 */32 - (IBAction)greenBtnClick33 {34 NSLog(@"%s", __func__);35 self.lable.textColor = [UIColor greenColor];36 }37 /**38 藍(lán)色按鈕39 */40 - (IBAction)blueBtnClick41 {42 NSLog(@"%s", __func__);43 self.lable.textColor = [UIColor blueColor];44 }45 @end
1.什么是控制器:
任何繼承于UIViewController的類(lèi),都稱(chēng)之為控制器
2.控制器的作用:
管理UI界面(負(fù)責(zé)管理UI界面的創(chuàng)建和一些事件的處理)
3.注意點(diǎn):
UI界面是可以和它與之對(duì)應(yīng)的控制器進(jìn)行連線的,我們可以通過(guò)連線的方式,讓UI界面上的元素和控制器中的代碼產(chǎn)生一定的關(guān)系;默認(rèn)情況下,UI界面中的元素是不能和方法進(jìn)行關(guān)聯(lián)的,要想關(guān)聯(lián)UI界面中的元素必須將方法的返回值修改為IBAction。
- (IBAction)redBtnClick;
1. IBAction
1.1 從返回值角度上看,作用相當(dāng)于void
1.2 只有返回值聲明為IBAction的方法,才能跟storyboard中的控件進(jìn)行連線
1.3 IBAction只能加在方法上, 不能加在屬性上
2. IBAction幾種連線方式
從"控制器"往"Storyboard"連線
從"Storyboard"往"控制器"連線
直接在"Storyboard"中往"Storyboard"上的界面頂部連線
直接在"Storyboard"中往"Storyboard"上的工具條連線
不用先定義方法, 直接從"Storyboard"往"控制器"連線(常用)
3.IBAction連線的注意點(diǎn):
3.1 在Storyboard中拷貝元素的時(shí)候需要注意
拷貝的同時(shí)會(huì)將以前的連線一起拷貝
一個(gè)方法可以很多個(gè)控件關(guān)聯(lián)
一個(gè)控件可以和很多方法進(jìn)行連線,在開(kāi)發(fā)中, 一般情況下不會(huì)這樣寫(xiě)
3.2 如果將按鈕關(guān)聯(lián)的方法刪除, 運(yùn)行之后會(huì)報(bào)一個(gè)經(jīng)典錯(cuò)誤
reason: '-[ViewController redBtnClick]: unrecognized selector sent to instance 0x7fb4aa618e50'
3.3 IBAction只能作為方法的返回值
@property(nonatomic, weak)IBOutlet UILabel *lable;
1. IBOutlet
1.1 只有聲明為IBOutlet的屬性,才能跟storyboard中的控件進(jìn)行連線
1.2 屬性要想能夠連線必須在數(shù)據(jù)類(lèi)型前面加上IBOutlet
2. IBOutlet的幾種連線方式
從"控制器"往"Storyboard"連線
從"Storyboard"往"控制器"連線
直接在"Storyboard"中往"Storyboard"上的界面頂部連線
直接在"Storyboard"中往"Storyboard"上的工具條連線
不用先定義方法, 直接從"Storyboard"往"控制器"連線
3. 注意點(diǎn):
一個(gè)控件可以關(guān)聯(lián)多個(gè)屬性
一個(gè)屬性不可以關(guān)聯(lián)多個(gè)控件
在進(jìn)行屬性連線的時(shí)候, Xcode會(huì)自動(dòng)幫我們進(jìn)行類(lèi)型檢測(cè), 如果類(lèi)型不匹配那么不能連線
如果將屬性和控件連線之后又將屬性刪除了, 那么只要程序運(yùn)行就會(huì)報(bào)一個(gè)經(jīng)典錯(cuò)誤
'[<ViewController 0x7fe9d9f1a5d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key lable.'
任何UI控件都可以和屬性進(jìn)行連線, 但是并不是任何控件都可以和方法連線. 只有繼承于UIControl的控件才可以連線
+ 什么是控件?
- 屏幕上的所有UI元素都叫做控件,也有人叫做視圖、組件
- 按鈕(UIButton)、文本(UILabel)都是控件
+ 控件的共同屬性有哪些?
- 尺寸
- 位置
- 背景色
- ......
+ 蘋(píng)果將控件的共同屬性都抽取到父類(lèi)UIView中
- 所有的控件最終都繼承自UIView
- UIButton、UILabel都是繼承自UIView(可以查看頭文件)
+ 每一個(gè)控制器(UIViewController)內(nèi)部都有個(gè)默認(rèn)的UIView屬性
- @property(nonatomic,retain) UIView *view;
- 控制器中管理的其他所有控件都是這個(gè)view的子控件(直接或者間接)
+ UIView常見(jiàn)屬性和方法
1 + @property(nonatomic,readonly) UIView *superview; 2 //獲得自己的父控件對(duì)象 3 4 + @property(nonatomic,readonly,copy) NSArray *subviews; 5 //獲得自己的所有子控件對(duì)象 6 7 + @property(nonatomic) NSInteger tag; 8 //控件的ID(標(biāo)識(shí)),父控件可以通過(guò)tag來(lái)找到對(duì)應(yīng)的子控件 9 10 + @property(nonatomic) CGAffineTransform transform;11 // 控件的形變屬性(可以設(shè)置旋轉(zhuǎn)角度、比例縮放、平移等屬性)12 13 + @property(nonatomic) CGRect frame;14 // 控件矩形框在父控件中的位置和尺寸(以父控件的左上角為坐標(biāo)原點(diǎn))15 16 + @property(nonatomic) CGRect bounds;17 //控件矩形框的位置和尺寸(以自己左上角為坐標(biāo)原點(diǎn),所以bounds的x、y一般為0)18 19 + @property(nonatomic) CGPoint center;20 // 控件中點(diǎn)的位置(以父控件的左上角為坐標(biāo)原點(diǎn))21 22 23 24 25 - (void)addSubview:(UIView *)view;26 //添加一個(gè)子控件view27 28 - (void)removeFromSuperview;29 //從父控件中移除30 31 - (UIView *)viewWithTag:(NSInteger)tag;32 //根據(jù)一個(gè)tag標(biāo)識(shí)找出對(duì)應(yīng)的控件(一般都是子控件)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注