转自: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

Xcode5 创建模板和UIView 关联XIB的更多相关文章

  1. uiview关联xib

    1,在需要实例的地方 //加载一个uiview的作法 [LotteryInvestigationView *lotteryInvestigationView=[[[NSBundle mainBundl ...

  2. iOS 给UIView添加xib

    2017-08-25编辑:这文章有点过时了 推荐新的文章:http://www.cnblogs.com/hero11223/p/6881848.html 一段时间没敲代码,以前一些简单的都不会做了,翻 ...

  3. 5 approach to load UIView from Xib

    After the past few years I found that the only manageable way for creating/maintaining view (or any ...

  4. Orchard之创建模板

    orchard创建模板的两种基本方式: 第一种:通过候补创建(需要用到候补神器): 第二种:通过Shape Tracing创建:

  5. Django创建模板、URL模式、创建视图函数

    1.在应用目录下创建模板(templates目录) 在模板目录下创建archive.html <!DOCTYPE html> <html lang="en"> ...

  6. Aurelia 创建模板

    今天介绍一下Aurelia创建模板的三种方式. 模板既可以作为页面也可以作为组件. 1. View+View Model Aurelia的模板通常由一个html文件和一个同名的ts或js文件组成,文件 ...

  7. Sitecore CMS中创建模板

    如何在Sitecore CMS中创建模板. 在/sitecore/templates选择应创建模板的文件夹中. 注意:在多站点项目中,通常会在模板所属的网站名称的/sitecore/templates ...

  8. 使用MyGeneration创建模板:介绍(翻译)

    原文信息 原文地址 原文作者信息: Justin Greenwood MyGeneration Software http://www.mygenerationsoftware.com April 2 ...

  9. 创建Hive/hbase相关联的表异常

    hive> CREATE TABLE hperson(id string, name string,email string) STORED BY 'org.apache.hadoop.hive ...

随机推荐

  1. USACO Section 5.3 Milk Measuring (IDDFS+dp)

    迭代加深搜索,从小到大枚举桶数的上限maxd:对每个maxd,枚举每个组合,判断是否能够倒出q:直到得到answer.判断的部分就用dp(完全背包). ------------------------ ...

  2. BZOJ 2733: [HNOI2012]永无乡(treap + 启发式合并 + 并查集)

    不难...treap + 启发式合并 + 并查集 搞搞就行了 --------------------------------------------------------------------- ...

  3. hihocoder #1260 : String Problem I

    题目链接   时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们有一个字符串集合S,其中有N个两两不同的字符串. 还有M个询问,每个询问给出一个字符串w,求有多少S中的 ...

  4. [LeetCode]题解(python):132-Palindrome Partitioning II

    题目来源: https://leetcode.com/problems/palindrome-partitioning-ii/ 题意分析: 给定一个s,可以将s拆成若干个回文子字符串之和,如果拆成了m ...

  5. Qt之美(一):d指针/p指针详解

    Translated  by  mznewfacer   2011.11.16 首先,看了Xizhi Zhu 的这篇Qt之美(一):D指针/私有实现,对于很多批评不美的同路人,暂且不去评论,只是想支持 ...

  6. Qt实现16进制unicode转utf-8以及国际音标编码问题

    由于项目需要,需要对网络资源进行解码.遇到编码问题.研究了下基本编码原理.于是有了下面两个通用代码 1. 16进制unicode转换为utf-8中文显示 QString unicodeToUtf_8( ...

  7. Hbuilder 常用快捷键汇总

    朋友推荐用Hbuilder编辑器,看了下Hbuilder官网和那视频,感觉牛逼哄哄的, 自己也就体验了一下,打开Hbuilder的快捷键列表,每个快捷键都体验了一下,以下展示出来的,每一个都是精华,每 ...

  8. Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决

    首先,先解决第一个问题,我们使用VS2010开发的时候,调试的时候,中文打印出来都是乱码,这个问题很纠结. 如下图: CCLOG("cclog: 测试使用标签的自动换行和个别字体大写&quo ...

  9. [置顶] java 枚举

    1. 什么是枚举?枚举就是用来存放一组固定的常量. 2. 枚举有什么作用?一些程序在运行时,它需要的数据不能是任意的,而必须是一定范围内的值:例如性别  男和女. public enum Gender ...

  10. linux下TUN/TAP虚拟网卡的使用

    转载:http://wushank.blog.51cto.com/3489095/1306849 tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设 ...