区块链技术博客
www.b2bchain.cn

iOS—自定义cell及两种复用方式的讲解

这篇文章主要介绍了iOS—自定义cell及两种复用方式的讲解,通过具体代码讲解7512并且分析了iOS—自定义cell及两种复用方式的讲解的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了iOS—自定义cell及两种复用方式的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7512.html。具体如下:

首先,在这里反省一下自己,在遇到问题的时候没有及时去解决,这一点很不好,得改

一、关于UITableView 复用cell两种方法:

  • 非注册
    -(id)dequeueReusableCellWithIdentifier:(NSString *)identifier;
    如果没有复用cell,程序可能会返回nil, 所以创建完cell后必须要做判空处理,未获取到则重新创建。这种方法可以不用注册。
 //尝试获得可以复用的单元格。但不一定获得到。得不到返回nil     UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:@"ft"];              //如果没有获得到     if(cell == nil) {         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ft"];     } 
  • 注册
    (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
    获取复用的cell,如果没有复用的cell,将自动使用提供的class类创建新的cell并返回,后面不需要再进行判空。在此之前必须要注册cell。
[self.tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"ft"];  MyTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ft" forIndexPath:indexPath];  
  • 区别:
    注册的方法需要提前将要复用的 Cell 类注册,而不需要在获取 Cell 时手动判断 cell的获取 是否为nil,这是因为 dequeueReusableCellWithIdentifier:identifier forIndexPath:在内部处理了这个过程,使得最后返回的一定是可用的 Cell
    具体看这篇

二、步骤

建立MyTableViewCell文件继承于UITableViewCell

// MyTableViewCell.h文件 @interface MyTableViewCell : UITableViewCell @property UILabel *label; @property UIButton *btn; @end  
//MyTableViewCell.m文件  #import "MyTableViewCell.h"  @implementation MyTableViewCell  - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {          self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];     if ([self.reuseIdentifier isEqualToString:@"ft"]) {         _label = [[UILabel alloc] init];         [self.contentView addSubview:_label];                  _btn = [UIButton buttonWithType:UIButtonTypeCustom];         [self.contentView addSubview:_btn];              }     return self; }  //布局 - (void)layoutSubviews {     _label.frame = CGRectMake(30, 10, 100, 50);     _btn.frame = CGRectMake(100, 10, 50, 50); }   @end 

在ViewController.h 中添加协议 定义数据视图对象

#import <UIKit/UIKit.h>  @interface ViewController : UIViewController  < //实现数据视图的普通协议 //数据视图的普通事件处理 UITableViewDelegate,  //实现数据视图的数据代理协议 //处理数据视图的数据代理 UITableViewDataSource >  //定义数据视图对象。数据视图用来显示大量相同格式的大量信息的视图 @property UITableView *tableView;  @end   

ViewController.m文件:

#import "ViewController.h" #import "MyTableViewCell.h"  @interface ViewController ()  @end  @implementation ViewController  - (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view.     self.view.backgroundColor = [UIColor whiteColor];     self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];     [self.view addSubview:self.tableView];          //设置代理     self.tableView.delegate = self;     self.tableView.dataSource = self;          //注册 使用- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;必须注册     [self.tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"ft"];      }  //组数 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    return 2; }    //组内行数 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {     return 2; }  //单元格高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {     return 70; }  //设置单元格 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {          MyTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ft" forIndexPath:indexPath];     //MyTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"ft"];     //if(cell == nil) {     //    cell = [[MyTableViewCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:@"ft"];     //} 	 	//以上为UITableView 重用cell两种方法     if(indexPath.section == 0) {         cell.label.text = @"ft";         [cell.btn setImage:[UIImage imageNamed:@"3.jpg"] forState:UIControlStateNormal];     } else {         cell.label.text = @"ff";         [cell.btn setImage:[UIImage imageNamed:@"5.jpg"] forState:UIControlStateNormal];     }      return cell;     }  @end  

运行:
iOS—自定义cell及两种复用方式

本文地址https://www.b2bchain.cn/7512.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » iOS—自定义cell及两种复用方式的讲解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们