标签:
转自:http://www.cnblogs.com/china-ldw/p/3533896.html
在做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文件用代码写;
这三种的方法,相信大家大致有个优劣判断;
我这里用到的是一种结合了三者的方法:
这个方法网上也有多种实现方法。我这里再提供一种:
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
标签:
原文地址:http://www.cnblogs.com/wvqusrtg/p/4531551.html