Xcode5 創建模板和UIView 關聯XIB


在做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了;(上文中已提到,不重復了);

 

附上示例:https://github.com/ludawei/MTTestView/tree/master


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM