在作ios應用開發的過程,不免遇到要建立 子view 和 自定義view的時候,歸根到底,咱們須要獲得一個UIView;html
要獲得這個UIView,大體有三種方法:ios
1,建立一個UIViewController,帶上一個XIB,獲得的UIView爲 UIViewController.view;git
2,建立一個XIB,而後直接load這個XIB;代碼以下github
NSArray *nibView = [[NSBundlemainBundle] loadNibNamed:@"xib文件名字"owner:self options:nil]; UIView *view = [[nibView objectAtIndex:0] retain]; xcode
3,建立一個繼承於UIView的類,在.h和.m文件用代碼寫;app
這三種的方法,相信你們大體有個優劣判斷;ui
我這裏用到的是一種結合了三者的方法:google
這個方法網上也有多種實現方法。我這裏再提供一種:spa
1,建立一個繼承於UIView的類MTTestView,這裏有了MTTestView.h和MTTestView.m文件;code
2,建立一個XIB,命名爲MTTestView.xib;
3,打開MTTestView.xib,在File's Owner設置Class爲UIViewController;
設置rootView的Class爲你建立的類名MTTestView;
這樣就將類和XIB關聯起來了;最後咱們要load這個view了.
這裏的load方法我作成了一個category(由於用到的地方比較多):
UIView+LoadFromNib.h
1 #import <UIKit/UIKit.h> 2 3 @interface UIView (LoadFromNib) 4 5 + (id)loadFromNib; 6 7 @end
UIView+LoadFromNib.m
1 #import "UIView+LoadFromNib.h" 2 3 @implementation UIView (LoadFromNib) 4 5 + (id)loadFromNib 6 { 7 id view = nil; 8 NSString *xibName = NSStringFromClass([self class]); 9 UIViewController *temporaryController = [[UIViewController alloc] initWithNibName:xibName bundle:nil]; 10 if(temporaryController) 11 { 12 view = temporaryController.view; 13 } 14 return view; 15 } 16 17 @end
最後,用法爲MTTestView *view = [MTTestViewloadFromNib];這樣就獲得了咱們想要的view了;
到這裏,還沒完。建立文件,設置XIB這些不須要動腦且重複的體力活,不該該要人來作,交給電腦就好了。
這裏就涉及到了xcode的文件模板了,關於建立詳解,請自行google,參考以下
http://www.cnblogs.com/powerauras/p/3358129.html
根據上文中的要求,咱們要建立一個帶xib的UIView(這裏最終目的)。
1,首先打開終端,找到xcode ios模板並打開:命令爲
open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates(這是我Mac上的路徑)
進入Objective-C class.xctemplate目錄下;打開TemplateInfo.plist
在Options->Item3->RequiredOptions->cocoaTouchSubclass中加一個UIView(原始的只有UIViewController爲UITableViewController);
相信你們明白這樣作的目的:讓建立UIView時 With XIB for user interface 這個選項可選;
最後一步:在Objective-C class.xctemplate目錄下,添加一個目錄UIViewwithXIB
這裏邊就是咱們建立的UIViewwithXIB模板了;固然須要修改___FILEBASENAME___.xib了;(上文中已提到,不重複了);