在做ios應用開發的過程,難免遇到要創建 子view 和 自定義view的時候,歸根到底,我們需要得到一個UIView;
要得到這個UIView,大致有三種方法:
1,創建一個UIViewController,帶上一個XIB,得到的UIView為 UIViewController.view;
2,創建一個XIB,然后直接load這個XIB;代碼如下
NSArray *nibView = [[NSBundlemainBundle] loadNibNamed:@"xib文件名字"owner:self options:nil]; UIView *view = [[nibView objectAtIndex:0] retain];
3,創建一個繼承於UIView的類,在.h和.m文件用代碼寫;
這三種的方法,相信大家大致有個優劣判斷;
我這里用到的是一種結合了三者的方法:
- 用UIView的類關聯XIB;
這個方法網上也有多種實現方法。我這里再提供一種:
1,創建一個繼承於UIView的類MTTestView,這里有了MTTestView.h和MTTestView.m文件;
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了;(上文中已提到,不重復了);