xib文件的加载方法
xib文件的加载方法
- 以UITableViewCell的cell为例
- 很多时候因为系统的cell无法满足我们的日常需求,我们都会自定义cell
- 因为cell的界面比较固定,所以通常都会选择用xib来描述cell
- 那么如何将xib文件加载到我们的tableView中呢?
一.加载xib的两种方法
1.通过NSBundle加载xib
-
注意点:通过NSBundle的方法,一定要给xib文件
加标识(ID)
,否则cell不会循环利用
-
给cell加ID时注意点
- 加上
const
,这样标识右边的变量就是只读
的,不能被修改,防止某些同事乱改我的ID
,那么就不能循环利用cell了
static NSString *const ID = @"cell";
示例代码
#import <UIKit/UIKit.h> @class MTYSubTagItem; @interface MTYSubCell : UITableViewCell /** cell的数据模型 */ @property (nonatomic, strong) MTYSubTagItem *tagItem; /** 快速从xib中加载cell的方法 */ + (instancetype)subCell; @end
// 从NSBundle中加载xib文件 + (instancetype)subCell { return [[[NSBundle mainBundle] loadNibNamed:@"MTYSubCell" owner:nil options:nil] firstObject]; }
- 加上
2. 通过注册的方法
-
定义一个全局的静态变量标识,只能在当前文件夹下用
-
在tableView的viewDidLoad方法中注册xib
// 从NSBundle中加载xib文件 - (void)viewDidLoad { [super viewDidLoad]; // 注册xib [self.tableView registerNib:[UINib nibWithNibName:@"MTYSubCell" bundle:nil] forCellReuseIdentifier:ID]; }
-
通过注册的方法加载xib,在tableView的代理方法中可以省略判断cell是否为空的那行代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MTYSubCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; /* // 可以省略 if(cell == nil) { // 创建cell } */ cell.tagItem = self.tags[indexPath.row]; return cell
}
```
二.注意点
- 加载出来的xib的
类型
,和加载时xib的名字
没有关系,和xib的class
有关 - 所以创建自定义cell的时候可以直接勾选
创建xib文件
,如果单独另外创建xib文件,那么要绑定类