很多時候我們工作很久突然閑下來的時候,是不是也感到無聊過?這就是我現(xiàn)在的生活,不過閑一段時間也挺好,可以好好回顧一下自己以前學習iOS路上的點點滴滴,做到溫故而知新。
且回顧、且整理記錄、且分享。
一個簡單的iOS小程序
簡單實現(xiàn)一個小程序 --- “改變文字顏色”

Snip20170228_2.png
這個小程序很簡單,實現(xiàn)步驟:
- 所需元素:三個button,一個Label
- 監(jiān)聽button的點擊事件,做對應修改顏色功能
這個小Demo通常有兩種實現(xiàn)方式,純代碼和XIB,下面介紹一下兩者實現(xiàn)和區(qū)別:
純XIB實現(xiàn)
這個直接上圖吧

Snip20170228_5.png
- 左邊是Xib拖的Label和三個button
- 右邊是Xib拖線與代碼進行關聯(lián)和對應
純代碼實現(xiàn)
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, weak) UILabel *label;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 1.創(chuàng)建Label
UILabel *label = [UILabel new];
label.text = @"我是測試文字";
label.textAlignment = NSTextAlignmentCenter;
label.frame = CGRectMake(0, 50, self.view.frame.size.width, 50);
self.label = label;
[self.view addSubview:label];
// 2.創(chuàng)建三個button
UIButton *redBtn = [self creatBtnWithTitle:@"紅" selector:@selector(redColor:)];
redBtn.frame = CGRectMake(0, CGRectGetMaxY(label.frame), 375/3, 50);
UIButton *greenBtn = [self creatBtnWithTitle:@"綠" selector:@selector(greenColor:)];
greenBtn.frame = CGRectMake(375/3, CGRectGetMaxY(label.frame), 375/3, 50);
UIButton *blueBtn = [self creatBtnWithTitle:@"藍" selector:@selector(blueColor:)];
blueBtn.frame = CGRectMake(375/3*2, CGRectGetMaxY(label.frame), 375/3, 50);
}
// 封裝創(chuàng)建按鈕的公共代碼
- (UIButton *)creatBtnWithTitle:(NSString *)title selector:(SEL)selector
{
UIButton *btn = [UIButton new];
[btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
[btn setTitle:title forState:UIControlStateNormal];
[btn addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
return btn;
}
// 紅色按鈕的點擊事件
- (void)redColor:(id)sender {
self.label.textColor = [UIColor redColor];
}
// 綠色按鈕的點擊事件
- (void)greenColor:(id)sender {
self.label.textColor = [UIColor greenColor];
}
// 藍色按鈕的點擊事件
- (void)blueColor:(id)sender {
self.label.textColor = [UIColor blueColor];
}
這兩種方式雖然都很簡單,但是有點不同,下面總結一下各自的特點
-
XIB
- 方便快捷,特別適用于局部UI的快速搭建
- XIB拖線直觀,但是多人開發(fā)容易暗含多種陷阱(例如:拖線的方法找不到;或者代碼里面注釋了,但是xib還是正常顯示的,一點擊就崩潰;或者一個控件連線多個方法,出現(xiàn)異常等)
- 適用范圍:
- 適用于一些靜態(tài)頁面,如果每次UI都動態(tài)改變的還是代碼為主。
- XIB經(jīng)典錯誤(運行過程中找不到對應方法)

Snip20170228_6.png
-
純代碼
- 相對麻煩,本來動動手拖個線的事,還要敲一些基礎代碼,效率低(不是指編譯或運行效率)
- 整潔易懂,如果代碼清晰的話,看起來也是很整潔的。
- 思路清晰,多人合作不易出現(xiàn)類似XIB或Storyboard那樣的雜亂的連線的問題。
- 動態(tài)UI的首選方式。
最后計算機在編譯的過程中無論哪種方式實現(xiàn)都是轉化成代碼的方式,代碼是萬能的
-
關于XIB里面的IBOutlet和IBAction
- IBOutlet:聲明插座變量,和XIB進行連線的標識,只有聲明為IBOutlet屬性才能跟XIB/StoryBoard中的控件連線
- IBAction:從返回值角度看,等同于void,它也是和XIB進行連線的標識,只有聲明為IBAction屬性才能跟XIB/StoryBoard中的控件連線