首页 > 代码库 > 加载自定义 cell 的 XIB 文件 的两种方式
加载自定义 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;}
加载自定义 cell 的 XIB 文件 的两种方式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。