object-c之自定义UITableViewCell控件的继承和数据的封装

说实话这个我刚刚看到的时候还是没有这么明白过来,然后回去想了很久终于理解了。

1.先做好一个继承自UITabelViewCell的基类,我们要明白基类是干嘛的,这个类也就是将数据显示到UITableView上的

在加载事件里面设置预估行高和自动行高,并且注册nib(我自定义了两个UITableVIewCell所以要注册两次)

//设置预估行高
    self.tableView.estimatedRowHeight = 80;
    //设置cell高度
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    
    //注册nib
    [self.tableView registerNib:[UINib nibWithNibName:@"NewsImageTableViewCell" bundle:nil] forCellReuseIdentifier:@"data"];
    [self.tableView registerNib:[UINib nibWithNibName:@"MyNewsTableViewCell" bundle:nil] forCellReuseIdentifier:@"myData"];

2.然后就是将数据显示到UITableView上(我这里是在一个UITableView上显示的两种UITableViewCell)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NewsModel *model = self.array[indexPath.row];
    if(model.imgextra.count==2)
    {
        NewsImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"data"];
        cell.model = model;
        return cell;
    }
    else
    {
        MyNewsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myData"];
        cell.model = model;
        return cell;
    }
}
//要注意的是,设置UITableView的组为1,和设置UITableView显示的数据条数,
3.好了填数据都ok了,我们需要拿到从子类传过来的数据所以定义一个这样一个属性

3.重要的是在基类创建一个可在任何地方调用的可变数组,他们两个相当于是统一个数组。
@property(nonatomic,strong,readonly)NSMutableArray *array;//在.h文件
@property(nonatomic,strong)NSMutableArray *array;//在.m文件
4.现在来定义数据模型,模型的基本属性我就不写了,看看重要的block,和数据回传的方法

//数据要从哪里来,就从我们的模型层里面来这里给他创建了一个block来传递我们的数据
typedef void (^callBackBlock)(NSArray *newArray,NSError *error);
//定义一个block为参数的方法数据回传
+ (void) updateWebDataWithURL:(NSURL *)url filshed:(callBackBlock)filshed;
//实现返回数据的方法实现
+ (void) updateWebDataWithURL:(NSURL *)url filshed:(callBackBlock)filshed
{
    //创建模型数组
    NSMutableArray *arrayModel = [NSMutableArray array];
    //创建会话
    NSURLSession *session = [NSURLSession sharedSession];
    //发起任务
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //处理数据,接收返回来的数据
        NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        //从字典中拿到需要的数组数据
        NSArray *arrayTemp = result[result.keyEnumerator.nextObject];
        for(NSDictionary *dic in arrayTemp)
        {
            NewsModel *model = [[NewsModel alloc]initWithdic: dic];
            [arrayModel addObject:model];
        }
        //跟新ui
        dispatch_async(dispatch_get_main_queue(), ^{
           //将数组和错误通过block回传给调用者
           filshed(arrayModel,error);
        });
    }];
    //执行任务
    [dataTask resume];
}

5.最后来创建一个继承自基类的控制器,然后你会发现这样会帮你省了很多代码量。

NSURL *url = [NSURL URLWithString:@"http://c.m.163.com/nc/article/list/T1348649654285/0-20.html"];
    [NewsModel updateWebDataWithURL:url filshed:^(NSArray *newArray, NSError *error) {
        //这里是将newArray数据处理之后,然后回传回来,把值赋给父类array来达到显示数据
        [self.array addObjectsFromArray:newArray];
        [self.tableView reloadData];
    }];

总结:主要是通过block来处理数据,然后处理完之后把数据赋值给父类。然后通过父类来刷新UITableView界面的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值