自定義 Xcode ViewController 類模板

寫之前先感謝下 @ColeXm偷懶寶典--打造屬于自己的 Xcode 類模板 讓我知道能夠知道還能自定義 Xcode 類模板惠啄。

然后 有興趣的可以看看我自己 博客 ,排版應(yīng)該稍微好點践美。

話不多說我們先來體驗下 :

圖1

什么是 Xcode 類模板 ?

說到 Xcode 類模板有些人可能覺得陌生妻导,其實作為一名 iOS 開發(fā),我們每天都會用到 Xcode 類模板毅糟,例如創(chuàng)建一個 UIViewController柠并,一個 Category 等等耐床,這些其實都是 Xcode 幫我們集成好的模板密幔。

我們先看看系統(tǒng)的 VC 模版怎么創(chuàng)建的 :

圖2

為什么要自定義 Xcode 類模板 ?

當(dāng)我們用 Xcode 自帶的模板創(chuàng)建一個 UIViewController 的子類時撩轰,我們會發(fā)現(xiàn) .m 文件會多出一些方法 :

圖3

而我們平時的開發(fā)中胯甩,或多或少都有自己的一些規(guī)范,尤其是在多人合作開發(fā)的情況下堪嫂,一些好的開發(fā)規(guī)范是相當(dāng)必要的偎箫。

我的 UIViewController 規(guī)范:

#import "MyViewController.h"

@interface MyViewController ()
// <UITableViewDelegate,UITableViewDataSource>

@end

@implementation MyViewController

#pragma mark - LifeCyle

- (void)viewDidLoad {
[super viewDidLoad];
}
/*
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}

-(void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
}
**/
- (void)dealloc {
NSLog(@"%@-釋放了",self.class);
}

#pragma mark - Intial Methods

#pragma mark - Target Methods

#pragma mark - Private Method

#pragma mark - Setter Getter Methods

#pragma mark - External Delegate

#pragma mark - UITableViewDelegate,UITableViewDataSource
/*
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return <#section#>;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return <#row#>;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return <# UITableViewCell #>;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return <#height#>;
}
**/
@end

這么一堆東西寫起來也是要點時間的,如果每創(chuàng)建個 VC 就要寫一遍也太不優(yōu)雅了皆串。

有沒有什么辦法能夠在我們創(chuàng)建 VC 的時候自動生成這些呢淹办?

創(chuàng)建自己的 Xcode 類模板

一份成品模版結(jié)構(gòu)大概這樣 :

圖4

介紹下里面的東西 (xxx 就是你自定義模版的名字) :

xxx.xctemplate:模版文件。

xxxObjective-C:OC模版文件恶复,里面包含 ___FILEBASENAME___.h___FILEBASENAME___.m 兩個文件怜森。

xxxXIBObjective-C:xxxObjective-C 多了個 ___FILEBASENAME___.xib 文件,可自定義谤牡。

xxxSwift:Swift模版文件副硅,里面包含一個 ___FILEBASENAME___.swift 文件。

xxxXIBSwift:xxxSwift 多了個 ___FILEBASENAME___.xib 文件翅萤,可自定義恐疲。

TemplateIcon.png:模版顯示的圖片。

TemplateInfo.plist:模版的配置信息断序,圖7流纹。

重新寫一份模版太繁瑣糜烹,我們直接拷貝一份系統(tǒng)的模版來修改

  • 拷貝 Cocoa Class.xctemplate违诗,修改名稱并刪除不需要的文件。(我這邊是 Xcode 8.2.1, 以后路徑可能有變)
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source

  • 修改 .h 為 :
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

___IMPORTHEADER_cocoaSubclass___

@interface ___FILEBASENAMEASIDENTIFIER___ : UIViewController

@end
  • 修改 .m 只需要添加自己需要的規(guī)范就行疮蹦,可以參考 上面我的 VC 模板诸迟。
  • 修改 .swift 為:
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

import UIKit

class ___FILEBASENAMEASIDENTIFIER___: UIViewController {

//MARK: - LifeCyle

override func viewDidLoad() {
super.viewDidLoad()
}

deinit {
print("\(object_getClassName(self)) - 釋放了!")
}

//MARK: - Intial Methods

//MARK: - Target Methods

//MARK: - Private Method

//MARK: - Setter Getter Methods

//MARK: - External Delegate

}

  • 新建 .xib 重命名 ___FILEBASENAME___.xib 并按照下圖修改:
圖5
圖6

上面 .h .m 里面 有些詞可能不明白,這里再稍稍解釋下:

1)DATE:標識當(dāng)前時間愕乎;

2)FILENAME:帶文件后綴的全名阵苇;

3)FILEBASENAME:不帶文件后綴的名字;

4)FULLUSERNAME:當(dāng)前的用戶名感论;

6)PROJECTNAME:工程名字绅项;

7)FILEBASENAMEASIDENTIFIER: VC 類名稱;

8)IMPORTHEADER_cocoaSubclass: 導(dǎo)入的頭文件比肄。

TemplateInfo.plist :

圖7

講解一些需要改動的東西 :

SortOrder:模版在界面中的位置快耿;

Options:對應(yīng) 圖2 四行囊陡;

FallbackHeader:.h 導(dǎo)入的頭文件;

RequiredOptions -> cocoaSubclass:是否支持選擇 xib掀亥;Default 默認 true 自動勾選撞反;

Values:自定義模版的名稱(一定要保持一致);

Suffixes:模版默認類名,效果如下圖搪花。

圖8

最后把創(chuàng)建好的 xxx.xctemplate 文件直接拷貝到系統(tǒng)路徑下就可以直接使用了:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source  

修改系統(tǒng)模板

平常開發(fā)中遏片,我們經(jīng)常用xib來畫一個View,之前用系統(tǒng)的模板創(chuàng)建View的時候是有勾選是否創(chuàng)建對應(yīng)xib的這個選項的撮竿,蘋果不知道什么時候改了吮便,現(xiàn)在貌似不行了:

這樣導(dǎo)致我們創(chuàng)建完View后,還需要再創(chuàng)建個對應(yīng)的xib文件倚聚,簡直神煩线衫!
怎么能自動創(chuàng)建xib文件呢?我們完全可以修改系統(tǒng)的模板來滿足我們的剛需:

  • 進入目錄惑折,找到Cocoa Touch Class.xctemplate文件
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source  
  • 拷貝一份 UIViewObjective-C文件并改名為UIViewXIBObjective-C授账,然后到其他有xib的文件夾里面,拷貝一份xibUIViewXIBObjective-C里面惨驶,xib可自行修改白热。(我這里只配置了Objective-C的,Swift步驟類似)
  • 找到 當(dāng)前目錄的TemplateInfo.plist文件粗卜,如下修改:
  • 重新創(chuàng)建系統(tǒng) View模板:

大功告成屋确!

Demo

最后放上我自己的一個 UIViewController 模板 懶得自己寫的可以直接用或者在我的模板基礎(chǔ)上修改!

參考鏈接

http://www.reibang.com/p/93527682d8d3

http://www.bobmccune.com/2012/03/04/creating-custom-xcode-4-file-templates/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末续扔,一起剝皮案震驚了整個濱河市攻臀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纱昧,老刑警劉巖刨啸,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異识脆,居然都是意外死亡设联,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門灼捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离例,“玉大人,你說我怎么就攤上這事悉稠」” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵的猛,是天一觀的道長耀盗。 經(jīng)常有香客問我辑甜,道長,這世上最難降的妖魔是什么袍冷? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任磷醋,我火速辦了婚禮,結(jié)果婚禮上胡诗,老公的妹妹穿的比我還像新娘邓线。我一直安慰自己,他們只是感情好煌恢,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布骇陈。 她就那樣靜靜地躺著,像睡著了一般瑰抵。 火紅的嫁衣襯著肌膚如雪你雌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天二汛,我揣著相機與錄音婿崭,去河邊找鬼。 笑死肴颊,一個胖子當(dāng)著我的面吹牛氓栈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婿着,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼授瘦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了竟宋?” 一聲冷哼從身側(cè)響起提完,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丘侠,沒想到半個月后徒欣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡婉陷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年帚称,在試婚紗的時候發(fā)現(xiàn)自己被綠了官研。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秽澳。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖戏羽,靈堂內(nèi)的尸體忽然破棺而出担神,到底是詐尸還是另有隱情,我是刑警寧澤始花,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布妄讯,位于F島的核電站孩锡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亥贸。R本人自食惡果不足惜躬窜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炕置。 院中可真熱鬧荣挨,春花似錦、人聲如沸朴摊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甚纲。三九已至口锭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間介杆,已是汗流浹背鹃操。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留春哨,地道東北人组民。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像悲靴,于是被迫代替她去往敵國和親臭胜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Xcode 類模板 例如創(chuàng)建一個 UIViewController癞尚,一個 Category 等等耸三,這些其實都是 X...
    andyJi閱讀 1,992評論 0 0
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件浇揩、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評論 4 62
  • 一仪壮、為什么要自定義模板 1.節(jié)省重復(fù)代碼手寫時間2.統(tǒng)一規(guī)范代碼,提高代碼可讀性3.減少手寫代碼,XIB或修改相關(guān)...
    huluo666閱讀 7,943評論 10 49
  • 文/蛟龍 世界是如此的安靜 仔細聆聽 沒有秋蟲呢喃 也沒有鳥語花香 沉寂在某個角落里 世界很忙碌 開始懷疑世界 懷...
    F芳子閱讀 229評論 0 0
  • 說到專心致志胳徽,我想到了韓非子講過的一個故事积锅。 趙襄主跟王子期學(xué)駕車,學(xué)得差不多了养盗,要和老師比試比試缚陷。他在比賽的過程...
    二班班閱讀 314評論 0 0