转自: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文件用代码写;

这三种的方法,相信大家大致有个优劣判断;

我这里用到的是一种结合了三者的方法:

  • 用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

最新文章

  1. 用CSS绘制最常见的形状和图形
  2. load()方法---------jQuery动态加载html
  3. MATLAB cvx 工具包使用
  4. [iOS dispatch_once创建单例]
  5. 如何清除windows 用户名及密码
  6. .Net操作Excel
  7. vsftpd 搭建与介绍
  8. C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序
  9. Oracle表变化趋势追踪记录
  10. Linux ln命令 - 建立文件/目录链接
  11. .net+easyui系列--datagrid
  12. big_table练习数据表
  13. redirect的错误用法asp.net怎么使用自定义错误
  14. column name is keyword from
  15. CentOS 7.0 上安装和配置 VNC 服务器
  16. 终极解决liunx GUI 无法显示中文的问题。
  17. 如何转换pdf文档为word文档--先标记下,本周把这个问题知识掌握
  18. redis 安装 与错误解决办法
  19. Python 让两个print()函数的输出打印在一行内
  20. 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

热门文章

  1. java的IO流包装不当导致从网页获取的数据出现乱码
  2. C part 1 -- 指令篇
  3. R语言学习笔记之外部文件读取
  4. Vmware虚拟机时间不准问题
  5. RFID标签天线的三种制作方法
  6. 使用Boost.Asio编写通信程序
  7. Java学习之DBUtils工具的学习
  8. jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)(转)
  9. 08.net网站开发(前端):5.jQuery
  10. 【剑指offer】调整数组顺序