zoukankan      html  css  js  c++  java
  • 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文件,那么要绑定类

  • 相关阅读:
    《别闹了,费曼先生》听书笔记
    提升失败回报率的清单
    《真实的幸福》听书笔记
    JAVA好书之《深入理解Java虚拟机》
    2017第32周五
    2017第32周四
    《具身认知》听书笔记
    javascript的rsa加密和python的rsa解密
    python socket timeout设置
    想使用gevent、mysql、sqlalchemy实现python项目协程异步达到并发的效果
  • 原文地址:https://www.cnblogs.com/mtystar/p/5986461.html
Copyright © 2011-2022 走看看