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文件,那么要绑定类

原文地址:https://www.cnblogs.com/mtystar/p/5986461.html