转自: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. BZOJ 1602: [Usaco2008 Oct]牧场行走( 最短路 )

    一棵树..或许用LCA比较好吧...但是我懒...写了个dijkstra也过了.. ---------------------------------------------------------- ...

  2. BZOJ 3223: Tyvj 1729 文艺平衡树(splay)

    速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...

  3. React使用笔记(3)-React Event Listener

    Date: 2015-11-28 12:18 Category: Web Tags: JavaScript Author: 刘理想 [toc] 1. 构造基本结构 首先,我们先创建一个按钮,一个输入框 ...

  4. 别忘记给你博客的windows live writer配置 ping服务

    写好一篇博客,想要实现秒收.就必须要为文章添加ping服务. 这里介绍一下给wlw添加ping服务的办法. 点击工具---选项--ping服务器. 在右侧栏中加入以下地址 http://rpc.pin ...

  5. 转:什么是FOUC?如何避免FOUC?

    今天了解了一个新的名词叫做 FOUC 浏览器样式闪烁,之前也听说过一些类似的东西,比如样式突变等等,但这东西竟然有学名的.. 什么是FOUC(文档样式短暂失效)?如果使用import方法对CSS进行导 ...

  6. shouldOverrideUrlLoading相关说明

    给WebView加一个事件监听对象(WebViewClient)并重写其中的一些方法:shouldOverrideUrlLoading:对网页中超链接按钮的响应.当按下某个连接时WebViewClie ...

  7. [C++ Basic] Const 用法

    定义: const 主要用于声明常量.当常量为对象时,对象值不可改变:当常量为指针时,该指针不可移动或重新赋值,但我们可以通过它去修改该指针的指向对象的值(前提是无需移动指针的修改).所谓的形参.返回 ...

  8. C++类成员常量

    由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const 修饰数据成员来实现.const 数据成员的确是存在的,但其含义却不是我们所期望的.const 数据成员只在某个 ...

  9. [译]Stairway to Integration Services Level 16 – Flexible Source Locations (多文件导入)

    介绍 在本文中我们将利用SSIS参数,变量 以及 Foreach Loop Container 从多个源动态导入数据. 开始前我们先下载一些数据.WeatherData_Dec08_Apr09.zip ...

  10. Oracle行转列实例

    行转列之前的数据: select * from tbname; 行转列之后的数据: select pud, listagg(ud, ',') within group(order by null) a ...