加载自定义 cell 的 XIB 文件 的两种方式

自定义单元格如果是使用 IB  方式创建的,则需要手动加载,因为 XIB 上的 cell 不会自动加载

第一种:使用应用程序束

应用程序束 NSBundle:获得工程中所有的资源的路径,相当于当前工程的目录。

//获得指定的xib中所有的视图
NSArray * array =  [[NSBundle mainBundle] loadNibNamed:@"ZYTableViewCell" owner:nil options:nil];

注意通过应用程序束获得返回值是 XIB 文件中所有的顶层视图,以数组的形式返回;

所以需要在数组中找到你需要的视图。

for (id object in array)
{
    //如果object 是 ZYTableViewCell类型,就找到了
    if ( [object isKindOfClass:[ZYTableViewCell class]])
    {
       cell = object ;
       break ;
    }
}//通过 isKindOfClass 方法可以知道是不是想要的类型

第二种:注册 XIB

//注册xib;找不到重用的cell的时候,系统可以根据注册的cell去创建
UINib * nib = [UINib nibWithNibName:@"ZYTableViewCell" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:@"Cell”];  //在注册的时候先写这句,然后逆向获得 nib 对象,即根据需要获得所需参数,这里的 bundle 处可填写 nil ,因为这是在主方法里, 否则可通过下面的方法获得 nib 对象。
NSBundle *bundle = [NSBundle mainBundle];
UINib *nib = [UINib nibWithNibName:@"ZYTableViewCell" bundle:bundle];

第二种方法适用于使用下面这句代码获得重用的 cell

ZYTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

示例:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ZYTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (!cell)
    {
        //xib 上 cell 不会自动加载 ;

        //应用程序束:获得工程中所有的资源的路径
        //获得指定的 xib 中所有的视图
        NSArray * array =  [[NSBundle mainBundle]loadNibNamed:@"ZYTableViewCell" owner:nil options:nil];
        //从数组中找到对应的 cell ( xib 上只有 cell 一个视图)
        //  cell = [array lastObject];
        for (id object in array)
        {
            //如果 object 是 ZYTableViewCell 类型,就找到了
            if ( [object isKindOfClass:[ZYTableViewCell class]])
            {
                cell = object ;
                break ;
            }
        }
    }
    return cell;
}
时间: 2024-12-28 01:02:46

加载自定义 cell 的 XIB 文件 的两种方式的相关文章

转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关于AS3加载图片等外部资源,我常用的有两种方式:Loader和Embed,各自的特点,总结如下: Embed:在Flash编译阶段就将资源嵌入,也就是说图片资源是会被编译进swf文件里面去的:这样子的好处是代码比较简洁,使用方便,也不存在加载顺序的问题,缺点是会增大swf文件的体积 Loader:在

自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用

闲话部分 最近闲着实在无聊,就做了点小东西练练手,由于原来一直在用AspNetPager进行分页,而且也进行了深度的定制与原有系统整合的也不错,不过毕竟是用别人的,想着看自己能试着做出来不能,后台的分页插件已经有比较成熟的了,那就自己试着写一个前台分页吧. 话不多说,先上效果图: 优点与缺点 来说说优缺点吧,首先AspNetPager是后台分页控件,所以在向客户端回传HTML文档之前生成HTML阶段 就会把分页代码生成完毕,然后回传,而JS是前端代码,就是HTML文档在服务器组织完毕往客户端传送

Eclipse项目中引用第三方jar包时将项目打包成jar文件的两种方式

转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目下建立文件MANIFEST.MF,内容如下: Manifest-Version: 1.0 Class-Path: lib/commons-codec.jar lib/commons-htt

Simics虚拟机Solaris 8操作系统获取host 系统win7上的文件的两种方式

1 介绍 本文基于的环境设置如下: ? 宿主操作系统:Windows 7 Ultimate ? 寄生操作系统:Solaris 8 SPARC (SunOS 5.8) ? 虚拟环境:Simics 3.0.4 本文假定已在Simics 上安装好Solaris 8 SPARC 操作系统. 动机:一个Unix下可以运行的二进制文件GraphGen,在单独的一台装有Ubuntu的电脑上不能运行,因为该电脑的硬件架构是基于X86的,而GraphGen是SPARC架构下才能运行的程序:在我的笔记本Win7系统

Spring加载properties文件的两种方式

在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便.在Spring中也可以这么做,而且Spring有两种加载properties文件的方式:基于xml方式和基于注解方式.下面分别讨论下这两种方式. 1. 通过xml方式加载properties文件 我们以Spring实例化dataSource为例,我们一般会在beans

解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

UI进阶 解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

iOS--控制器加载自定义view的xib

我们在项目中,经常需要使用到自定义的view,而xib布局显得更为简洁,那么如何加载一个自定义的xib呢,网上的方法也很多很多,就是因为太多了,我经常会弄混,所以总结其中一个使用,如果以后使用到其他的在补充 O(∩_∩)O~~ 1.创建一个继承UIView的文件和xib,命名一样 2.设置view所有者的class 3.给view关联属性 view的.m文件里面加载xib: -(void)awakeFromNib { [[NSBundlemainBundle]loadNibNamed:@"Tes

objectARX加载lisp函数、源码的一种方式

//感谢高飞鸟highflybird版主的思路以及研究. //先声明非公开函数acedEvaluateLisp extern int acedEvaluateLisp(const ACHAR*,struct resbuf *&); //直接使用源码的方式 struct resbuf *rbOut=NULL; int nRet= acedEvaluateLisp(_T("(defun sk_myline(/ ent)(setq ent(entmakex (list (cons 0 \&qu